4

我试图在 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
4

2 回答 2

0

问题是它仍然是一个前瞻性。因此,它会检查点是否与“a”存在于同一位置,而不是位于后面的位置。

于 2012-09-27T19:50:59.990 回答
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 之前在评论中链接的文章(在 JavaScript 中模仿Lookbehind),这是我今年早些时候正在编写的一些代码。

于 2012-09-27T20:12:02.320 回答