我有一个段落,我想从中提取字符串,用双方括号"[[" ... "]]"
包围。括号内的一些字符串包含一个条形|我想省略那些。我创建了以下正则表达式\[\[([^|]+?)\]\]/g
这个正则表达式完美无缺,然而它返回带有周围方括号的字符串。有类似的问题通过使用str.split来解决这个问题,但我匹配了200多个字符串,这可能会减少性能,因此我只想要正则表达式的答案。
编辑 - 忘记提及这是一个非常长的段落,我需要所有匹配因此我指定/ g标志以获取所有匹配的数组。
答案 0 :(得分:4)
你的正则表达式看起来很好。我想你只是在看结果的错误部分。当你得到一个匹配时,Regex.exec()
返回一个数组。索引0包含完整匹配,例如"[[value]]"
,后面的索引包含parantheses中的每个子匹配,例如"value"
。所以,只需查看match[1]
而不是match[0]
。
要处理多个匹配项,请添加g
标志,并使用while
循环多次运行Regex.exec()
- 这将为每个连续匹配返回结果数组,直到不再匹配为止找到并返回null
。您可以将每个结果推送到一个数组中。你的正则表达式仍然是相同的。
var inputs = [
"foo [[value]] bar",
"foo [[val1|val2]] bar",
"foo [[value1]] bar [[value|2]] fizz [[value3]] buzz",
];
console.clear();
for(var i = 0; i < inputs.length; i++) {
var re = /\[\[([^|]+?)\]\]/g;
var match;
var matches = [];
while((match = re.exec(inputs[i])) !== null) {
matches.push(match[1]);
}
console.log(inputs[i]);
console.log(matches);
}
&#13;