我有一个长度不同的子字符串被符号'_‘分割,一些子字符串必须在多个子字符串中被分割.
示例:
"_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
我遇到的问题是最后一部分。在周旋之后,我开始思考这是否可能。是吗?
任何形式的指导都是值得赞赏的。
发布于 2016-05-09 14:34:20
您可以使用以下正则表达式:
/[^\W_]+(?:\[([^\][]*)]|-([^_]+))/g
该模式匹配任何1+字符字母数字序列([^\W_]+
),后面是没有[
和]
的[...]
子字符串(使用\[([^\][]*)]
-注意,它将[...]
中的内容捕获到第1组中)或连字符后面跟着_
以外的字符(在-
被捕获到第2组之后)。
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组添加到结果数组中。
https://stackoverflow.com/questions/37117651
复制相似问题