Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript回头看_Javascript_Regex - Fatal编程技术网

Javascript回头看

Javascript回头看,javascript,regex,Javascript,Regex,我试着用Javascript模仿后面的外观 我想匹配字符串“object.all”,但不匹配“object.call”。我试过: new RegExp('(?!(\\.))all') 但是这两个例子都是匹配的,我想要的是看一下后面的(点)是否就在all后面,有人能解释一下我的正则表达式出了什么问题吗 提前谢谢 这个很好: 'object.all'.replace(new RegExp('(?!(\\.))all'), 'foo') // => object.foo 对于这个,我希望

我试着用Javascript模仿后面的外观

我想匹配字符串“object.all”,但不匹配“object.call”。我试过:

new RegExp('(?!(\\.))all')
但是这两个例子都是匹配的,我想要的是看一下后面的
(点)是否就在
all
后面,有人能解释一下我的正则表达式出了什么问题吗

提前谢谢


这个很好:

'object.all'.replace(new RegExp('(?!(\\.))all'), 'foo') 
// => object.foo
对于这个,我希望结果是“object.call”:


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

尽管这看起来很复杂,但这将完成工作:

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之前在评论中链接的文章()。

你检查了吗?@johnymapp,因为我是这样使用它的:
“object.call”。replace(new RegExp('(?!(\\))all'),“foo”)
@m.buettner您的链接似乎非常复杂:)@jules我已经更新了我的答案-很抱歉这里的混乱。2018年规范中添加了外观滞后。它们在chrome中工作,但不是。我更新了我的答案,以反映您在问题中提供的新示例。
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