我正试图在Javascript中模仿背后,
我想匹配字符串“object.all”而不是“object.call”。我试过了:
new RegExp('(?!(\\.))all')
但是这两个例子都是匹配的,我想要的是在后面测试.
(点)是否在all
后面,有人可以解释我的正则表达式有什么问题吗?
提前致谢
这个很好:
'object.all'.replace(new RegExp('(?!(\\.))all'), 'foo')
// => object.foo
对于这个我希望结果是“object.call”:
'object.call'.replace(new RegExp('(?!(\\.))all'), 'foo')
// => object.cfoo
答案 0 :(得分:0)
问题在于它仍然是一个先行者。因此,它会检查点是否与“a”位于同一位置,而不是位于后面的位置。
答案 1 :(得分:0)
虽然这似乎很复杂,但这将完成工作:
function replaceAll(string, replacement) {
var output = string.replace(/(\.)?all/g, function($0, $1) {
return $1 ? $1 + replacement : $0;
});
return output;
}
var test1 = replaceAll("object.all", "foo");
var test2 = replaceAll("object.call", "foo");
console.log(test1); // object.foo
console.log(test2); // object.call
我在今年早些时候的一些代码中使用了@ m.buettner在评论中链接的文章(Mimicking Lookbehind in JavaScript)。