求索
例如,我需要从块中获取所有的(test\d+),从关键字start开始,然后用and、&、,来分隔。
bla bla start test1, test2, test3 and test4 & test12 but not test5,
test6 or test33, and start test100.所以我应该去找test1, test2, test3, test4, test12, test100
沙盒
我已经和雷克斯玩了一段时间了,还有半途而废。我得到了正确的街区,但它只提取最后一次发生。。
start\s(?:(test\d+)(?:\s?(?:[,&]|and)\s?)?)+
发布于 2016-03-31 07:01:43
这不能在一个单一的正则表达式中完成。您需要在两个步骤中使用带有回调的函数:
var str = 'bla bla start test1, test2, test3 and test4 & test12 but not test5, \ntest6 or test33, and start test100';
var m = str.match(/\bstart((?:\s*(?:[,&]|and)?\s*test\d+\b)+)/g).map(function(val) {
return val.match(/\btest\d+/g);
})
console.log(m[0]);
//=> ["test1", "test2", "test3", "test4", "test12"]
console.log(m[1]);
//=> ["test100"]下面的注释是一个PCRE正则表达式,它使用单个regex来解决这个问题:
(?:\bstart|(?<!^)\G)\s*(?:[,&]|and)?\s*(test\d+)https://stackoverflow.com/questions/36325811
复制相似问题