这可以用正则表达式完成吗?

时间:2016-05-09 13:56:04

标签: regex

我有一个字符串,其中包含不同长度的子字符串,用符号' _'并且一些子字符串必须分成多个子子字符串......

示例:

"_foo-2_bar-12_un[3;1]iver[3]se[3-7]"

应该像这样分组:

"foo-2", "2", "bar-12", "12", "un[3;1]", "3;1", "iv", "er[3]", "3", "se[3-7]", "3-7"

我想出了类似的东西:

/(?:((?:(?:\[([a-z0-9;-]+)\])|(?<=_)(?:[a-z0-9]+)|-([0-9]+))+))/ig

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

赞赏任何形式的指导。

1 个答案:

答案 0 :(得分:1)

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

/[^\W_]+(?:\[([^\][]*)]|-([^_]+))/g

请参阅regex demo

该模式匹配任何1 + char字母数字序列([^\W_]+),后跟[...]子串中没有[]内部(\[([^\][]*)] - 请注意,它会将[...]内的内容捕获到组1中)或后跟1 {+ 1}}以外的1个字符的连字符(并且_之后的此部分将被捕获到组2中)。

&#13;
&#13;
-
&#13;
&#13;
&#13;

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