我需要在JavaScript中使用正则表达式的lookbehind,所以找到了 Simulating lookbehind in JavaScript (take 2)。 另外,我发现作者Steven Levithan是开发XRegExp的人。
我git克隆了XRegExp 3.0.0-pre,并测试了
一些外观逻辑 http://regex101.com/r/xD0xZ5 使用XRegExpvar 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高级谢谢!
答案 0 :(得分:4)
我想提供有关事态的最新消息。
Lookahead断言已成为JavaScript正则表达式的一部分 语法从一开始。他们的对手,后视断言,是 终于在谷歌Chrome 62中introduced ... *了 资料来源: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>
但是,没有其他浏览器支持lookbehind断言 - 甚至不是node.js,它基于v8(使用node v9.7.1/v8 6.2.414.46测试过,但我希望它将在即将发布的节点版本中添加。)
希望其他供应商很快就会推出。
答案 1 :(得分:1)
可以使用non-capturing groups,例如
$ node
> 'foobar'.replace(/(foo)(?:bar)/g, '$1test')
'footest'
在String.replace的第二个参数中,$1
的特殊符号引用了第一个捕获组,在这种情况下为(foo)
。通过使用$1test
,可以将$1
视为第一个匹配组的占位符。展开后,这会变为'footest'
。
有关正则表达式的详细信息,请view what it matches here。