Javascript 替换后跟不相同字符的字符

Javascript 替换后跟不相同字符的字符,javascript,node.js,regex,Javascript,Node.js,Regex,使用JavaScript替换后跟不同字符的字符。 我有一个字符串,其中该字符串可能包含正斜杠(/)。 如果字符串包含一个正斜杠,那么我需要用两个“/”来替换它,这样它就会被转义 e、 g.'sample/word'需要变成'sample//word' 另一个规则是奇数的斜杠需要变成偶数 e、 g'//'=>'///' 我已经研究过使用正则表达式,但据我所知,JavaScript ES6中不提供所需的反向查找。感谢您的帮助 我一直在使用的示例字符串: let strs = [ 'sample/

使用JavaScript替换后跟不同字符的字符。

我有一个字符串,其中该字符串可能包含正斜杠(/)。 如果字符串包含一个正斜杠,那么我需要用两个“/”来替换它,这样它就会被转义

e、 g.
'sample/word'
需要变成
'sample//word'

另一个规则是奇数的斜杠需要变成偶数

e、 g
'//'
=>
'///'

我已经研究过使用正则表达式,但据我所知,JavaScript ES6中不提供所需的反向查找。感谢您的帮助

我一直在使用的示例字符串:

let strs = [
  'sample/single',
  'sample//double',
  'sample',
  '//',
  '/',
  '//sample',
  'sample//',
  '/sample',
  'sample/',
  'sample///',
  '///sample',
  '////sample',
  '/////sample',
  'sample/////',
  'sample////',
  'sample / again',
  'sa/mple agai/n'
]

仅当行中的/characters作为其计算总数/文本中的/characters时,此选项才有效,适用于除最后一个之外的数据集,这可能在一定程度上对您有所帮助

var newstr = str;
if( str.match(/([/])/g).length % 2 == 1 )
   newstr = str.replace(/([/])/g, "$1$1");

使用上面的规则,您可以使用以下函数来满足这些规则并实现输出。在这里,我将一个函数传递到
replace
函数中,该函数允许您检查正则表达式是否匹配奇数或偶数
/
,从而相应地进行替换:

让strs=[
“样本/单个”,
“示例//双精度”,
“样本”,
'//',
'/',
“//示例”,
“样本//”,
“/sample”,
“样本/”,
“样本//”,
“///样本”,
“///样本”,
“//sample”,
“示例//”,
“样本//”,
“样本/再次”,
'sa/mple agai/n'
];
让结果=
strs.map(elem=>elem.replace(/\/+/g,match=>match.length%2!=0?match+'/':match));
控制台日志(结果)请尝试以下操作:

让strs=[
“样本/单个”,
“示例//双精度”,
“样本”,
'//',
'/',
“//示例”,
“样本//”,
“/sample”,
“样本/”,
“样本//”,
“///样本”,
“///样本”,
“//sample”,
“示例//”,
“样本//”,
“样本/再次”,
'sa/mple agai/n'
];
常量slashMeUpBro=(word)=>{
让words=word.split('/');
word.split('/').forEach((word,index)=>words[index]=word.replace(/\/+/g,'/');
返回单词。join('/');
}

strs.forEach(word=>console.log(slashMeUpBro(word))如果要使用正则表达式,可以使用:

(^.[^\/])(\/)(?=(?:\/)*(?!\/)

解释

  • (^ |[^\/])
    第一个捕获组,用于声明行的开头或匹配非正斜杠
  • (\/)
    第二个捕获组匹配正斜杠
  • (?=
    正向前瞻
    • (?:\/\/)*
      重复零次或多次
      /
    • (?!\/)
      负向前看,断言后面的内容不是正斜杠
  • 关闭正向前瞻
替换为2个捕获组,后跟正斜杠

$1$2/

let pattern=/(^ |[^\/])(\/)(?=(?:\/\/)*(?!\/)/g;
设strs=[
“//\n/”,
“样本/单个”,
“示例//双精度”,
“样本”,
'//',
'/',
“//示例”,
“样本//”,
“/sample”,
“样本/”,
“样本//”,
“///样本”,
“///样本”,
“//sample”,
“示例//”,
“样本//”,
“样本/再次”,
'sa/mple agai/n'
];
标准forEach((s)=>{
log(s.replace(模式,“$1$2/”)

});不幸的是,我确实需要处理任何不在一行中的代码。谢谢你的调查!拆分和替换的良好使用。我会比较一下你的解决方案和尼克的解决方案。谢谢