javascript - 如何将重复模式与它们之间的可选空格匹配?

标签 javascript regex

我需要从 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) 

这个模式大致转化为:

  1. (?<=() 寻找 ( 并在该字符之后开始匹配
  2. \w* “查找零个或多个单词字符并匹配它们”
  3. (?=)) “寻找 ) 并在该字符之前停止匹配”
  4. /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/

相关文章:

javascript - JS在点击一个div时应用自定义样式并从另一个div中删除样式

javascript - 从 url 获取内容并将其放置在页面上的容器中

javascript - 替换数组元素而不丢失引用?

Python - 使用 re.findall 中的\n 将列表写入文本文件

javascript - 如何将数组作为 JavaScript 中的新属性推送到另一个数组元素中?

javascript - 无法向访客发送新日历事件的通知 - Google Apps

javascript - Eloquent JS中的正则表达式无限回溯

regex - 如何查找包含 3 组双字母的行(这些组可能包含也可能不包含相同的字母)

c# - 解析格式化字符串

javascript - 如何使用正则表达式查找文件中的所有 Handlebars 部分