超过here我被要求用我的一条评论形成一个新问题,所以我在这里。我想知道是否有可能只替换某些单词中的短语。例如:替换BAB
中的CBABAC
而不是BAB
中的DABABCC
,谢谢!
答案 0 :(得分:2)
使用lookahead:
BAB(?=AC)
<强>解释强>
"BAB" + // Match the characters “BAB” literally
"(?=" + // Assert that the regex below can be matched, starting at this position (positive lookahead)
"AC" + // Match the characters “AC” literally
")"
或
BAB(?!CC)
<强>解释强>
"BAB" + // Match the characters “BAB” literally
"(?!" + // Assert that it is impossible to match the regex below starting at this position (negative lookahead)
"CC" + // Match the characters “CC” literally
")"
答案 1 :(得分:0)
你没有说明替换逻辑的基础是什么,所以这是一个普遍的答案。
正如一些人所提到的,你可以使用前瞻,但JavaScript的一个主要烦恼是它本身不支持lookbehinds,所以你只有一半的解决方案。
缺少后视的常见解决方法是匹配(而不是锚定)您感兴趣的位之前的内容,然后将其重新插入回调中。
假设我想将foo
的所有实例替换为bar
,其前面是一个数字,并以数字为前提。
var str = 'foo 1foo1 foo2';
console.log(str.replace(/(\d)foo(?=\d)/g, function($0, $1) {
return $1+'bar';
})); //foo 1bar1 foo1
所以我使用前瞻作为简单部分,并使用回调来弥补缺乏外观。
在JS中实现了lookbehind, including one I wrote ,其中正面或负面的lookbehind作为额外参数传递。使用它,这将得到与上面相同的结果:
console.log(str.replace2(/foo(?=\d)/g, 'bar', '(?<=\\d)'));