在这里,我被要求用我的一条评论形成一个新问题,所以我在这里。我想知道是否可以仅在某些单词中替换短语。例如:替换BAB
inCBABAC
但不是BAB
inDABABCC
谢谢!
问问题
70 次
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 的主要烦恼之一是它本身不支持后瞻,因此您只有一半的解决方案。
缺少后视的常见解决方法是匹配(而不是锚定到)您感兴趣的位之前的内容,然后将其重新插入回调中。
假设我想替换foo
with的所有实例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 回答