我需要在 JavaScript 中使用正则表达式的 lookbehind,所以找到了 Simulating lookbehind in JavaScript (take 2) . 另外,我发现作者 Steven Levithan 是开发 XRegExp 的人。 .
我 git 克隆了 XRegExp 3.0.0-pre , 并进行了测试
一些回顾逻辑 http://regex101.com/r/xD0xZ5 使用 XRegExp
var XRegExp = require('xregexp');
console.log(XRegExp.replace('foobar', '(?<=foo)bar', 'test'));
好像不行;
$ node test
foobar
我错过了什么?谢谢。
编辑: 我的目标是类似
(?<=foo)[\s\S]+(?=bar)
(EDIT2 链接错误并已修改)
回答:
var str = "fooanythingbar";
console.log(str);
console.log(str.replace(/(foo)(?:[\s\S]+(?=bar))/g, '$1test'));
//footestbar
感谢@Trevor Senior 谢谢!
最佳答案
我想介绍一下最新情况。
Lookahead assertions have been part of JavaScript’s regular expression syntax from the start. Their counterpart, lookbehind assertions, are finally being introduced ... *in Google Chrome 62
Source: https://developers.google.com/web/updates/2017/07/upcoming-regexp-features
如果您使用 Chrome 62+, v8 6.2.414 运行它你会得到预期的结果:footest
- 独立于 XRegex !
var x = XRegExp('(?<=foo)bar', 'g');
console.log(XRegExp.replace('foobar', x, 'test'));
console.log("foobar".replace( new RegExp('(?<=foo)bar',"g"),"test"));
<script src="https://unpkg.com/xregexp/xregexp-all.js"></script>
但是,目前还没有其他浏览器支持后向断言 - 甚至是基于 v8 的 node.js(使用 node v9.7.1/v8 6.2.414.46 测试,但我希望它会在即将发布的节点版本中添加。)
希望其他 vendor 很快跟进。
关于javascript - XRegExp 没有回顾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18156794/