首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这能用regex做吗?

这能用regex做吗?
EN

Stack Overflow用户
提问于 2016-05-09 13:56:04
回答 1查看 62关注 0票数 1

我有一个长度不同的子字符串被符号'_‘分割,一些子字符串必须在多个子字符串中被分割.

示例:

代码语言:javascript
运行
复制
"_foo-2_bar-12_un[3;1]iver[3]se[3-7]"

应该分成这样的小组:

代码语言:javascript
运行
复制
"foo-2", "2", "bar-12", "12", "un[3;1]", "3;1", "iv", "er[3]", "3", "se[3-7]", "3-7"

我想出了这样的点子:

代码语言:javascript
运行
复制
/(?:((?:(?:\[([a-z0-9;-]+)\])|(?<=_)(?:[a-z0-9]+)|-([0-9]+))+))/ig

我遇到的问题是最后一部分。在周旋之后,我开始思考这是否可能。是吗?

任何形式的指导都是值得赞赏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 14:34:20

您可以使用以下正则表达式:

代码语言:javascript
运行
复制
/[^\W_]+(?:\[([^\][]*)]|-([^_]+))/g

regex演示

该模式匹配任何1+字符字母数字序列([^\W_]+),后面是没有[][...]子字符串(使用\[([^\][]*)] -注意,它将[...]中的内容捕获到第1组中)或连字符后面跟着_以外的字符(在-被捕获到第2组之后)。

代码语言:javascript
运行
复制
var re = /[^\W_]+(?:\[([^\][]*)]|-([^_]+))/g; 
var str = '_foo-2_bar-12_un[3;1]iver[3]se[3-7]';
var res = [];
while ((m = re.exec(str)) !== null) {
   res.push(m[0]);
   if (m[1]) {
     res.push(m[1]);
   } else {
     res.push(m[2]);
   }
}

document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";

在此代码中,将在每次迭代时分析match对象:第0组(整个匹配) ias添加到最终数组中,如果第1组匹配,则添加第1组,否则将第2组添加到结果数组中。

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

https://stackoverflow.com/questions/37117651

复制
相关文章

相似问题

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