首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取仅以关键字开头的事件列表,并以标记表列表分隔。

获取仅以关键字开头的事件列表,并以标记表列表分隔。
EN

Stack Overflow用户
提问于 2016-03-31 06:33:58
回答 1查看 52关注 0票数 0

求索

例如,我需要从块中获取所有的(test\d+),从关键字start开始,然后用and&,来分隔。

代码语言:javascript
复制
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?)?)+

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 07:01:43

这不能在一个单一的正则表达式中完成。您需要在两个步骤中使用带有回调的函数

代码语言:javascript
复制
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来解决这个问题:

代码语言:javascript
复制
(?:\bstart|(?<!^)\G)\s*(?:[,&]|and)?\s*(test\d+)

RegEx演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36325811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档