1

这里,我被要求用我的一条评论形成一个新问题,所以我在这里。我想知道是否可以仅在某些单词中替换短语。例如:替换BABinCBABAC但不是BABinDABABCC谢谢!

4

2 回答 2

2

使用前瞻

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
")"  
于 2012-07-27T17:44:09.313 回答
0

你没有说替换逻辑的依据是什么,所以这是一个笼统的答案。

正如一些人所提到的,您可以使用前瞻,但 JavaScript 的主要烦恼之一是它本身不支持后瞻,因此您只有一半的解决方案。

缺少后视的常见解决方法是匹配(而不是锚定到)您感兴趣的位之前的内容,然后将其重新插入回调中。

假设我想替换foowith的所有实例bar,它的前面和后面是一个数字。

var str = 'foo 1foo1 foo2';
console.log(str.replace(/(\d)foo(?=\d)/g, function($0, $1) {
    return $1+'bar';
})); //foo 1bar1 foo1

所以我对简单的部分使用了前瞻,并使用回调来弥补后瞻的不足。

JS 中有后向的实现,包括我写的一个,其中正或负的后向作为额外参数传递。使用它,这将得到与上面相同的结果:

console.log(str.replace2(/foo(?=\d)/g, 'bar', '(?<=\\d)'));
于 2012-07-27T18:02:22.087 回答