我需要从 JS 中的字符串中提取以下内容:
'Sdfg dfg ldfgh (abc)' => ['abc']
'Sdfg dfg ldfgh (abc) ' => ['abc']
'Sdfg dfg ldfgh (abc) (cde)' => ['abc','cde']
'Sdfg dfg ldfgh (abc)(cde) (efgh)' => ['abc', 'cde', 'efgh']
我需要提取括号中的“标签”,它们之间可能有空格,而且整个字符串末尾也可能有空格。
我尝试过类似 /(\(.*\))(\s?\(.*\))+/
的方法,但它不足以收集所有标签。如何在标签之间和之后提取所有我需要的这些可选空格?
最佳答案
以下正则表达式应该可以满足您的要求:
/(?<=\()\w*(?=\))/g)
这个模式大致转化为:
- (?<=() 寻找 ( 并在该字符之后开始匹配
- \w* “查找零个或多个单词字符并匹配它们”
- (?=)) “寻找 ) 并在该字符之前停止匹配”
- /g “在整个输入字符串中全局应用此模式匹配行为”
将此模式与 match()
结合使用函数将导致在数组中返回零个或多个字符串,其中这些字符串的内容对应于输入字符串的 parantheiss 对之间的内容:
const pattern = /(?<=\()\w*(?=\))/g;
console.log('Sdfg dfg ldfgh (abc)'.match(pattern));
console.log('Sdfg dfg ldfgh (abc) '.match(pattern));
console.log('Sdfg dfg ldfgh (abc) (cde)'.match(pattern));
console.log('Sdfg dfg ldfgh (abc)(cde) (efgh)'.match(pattern));
关于javascript - 如何将重复模式与它们之间的可选空格匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754169/