我需要在JavaScript中使用regex的lookbehind,所以找到了在JavaScript中模拟查找(取2)。此外,我发现作者Steven是开发XRegExp的人。
我克隆了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)http://regex101.com/r/sV5gD5
(EDIT2链接错误并修改)
答案:
var str = "fooanythingbar";
console.log(str);
console.log(str.replace(/(foo)(?:[\s\S]+(?=bar))/g, '$1test'));
//footestbar荣誉归于@Trevor高级谢谢!
发布于 2013-08-09 23:00:05
使用非捕获群是可能的。
$ node
> 'foobar'.replace(/(foo)(?:bar)/g, '$1test')
'footest'在String.replace的第二个参数中,$1的特殊表示法引用第一个捕获组,在本例中为(foo)。通过使用$1test,可以将$1视为第一个匹配组的占位符。展开后,这将变成'footest'。
有关正则表达式的更多详细信息,请参见在这里查看与之匹配的内容。
发布于 2018-04-19 21:14:04
我想介绍一下情况的最新情况。
前瞻性断言从一开始就成为JavaScript正则表达式语法的一部分。在谷歌Chrome 62中,他们的对应方--查找后断言--终于成为了介绍 . 来源:https://developers.google.com/web/updates/2017/07/upcoming-regexp-features
如果您在铬62+,v8 6.2.414中运行这个程序,您将得到预期的结果:footest
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>
然而,还没有其他浏览器支持查找断言--甚至node.js也不支持,它基于v8 (用节点v9.7.1/v8 6.2.414.46进行测试,但我预计它将在即将发布的节点版本中添加)。
希望其他供应商很快就会跟进。
https://stackoverflow.com/questions/18156794
复制相似问题