javascript - 在一个组中多次匹配量化的单词字符
问题描述
这让我发疯。该字符串如下所示:
actionname {componentOne, componentTwo, componentThree}
在此示例中,我应该在组中actionname
匹配componentOne
,componentTwo
和componentThree
. 当然,我不知道括号内“组件”的确切数量,它至少是一个,但可能是多个。
我试过:
\w+
初学者级别,匹配所有,包括actionname
. 这可能适合目的,但有更好的解决方案,
^actionname\s*{\s*(\w+)+\s*.*}
该死的,只匹配一个,在这种情况下componentOne
,即使我使用量词来匹配组(\w+)+
,
^actionname\s*{\s*(\w+)(:?\s*\,\s*(\w+)|\s*})
这就是失败的重点。我可以将匹配扩展到第二个组件,但只能以声明方式进行,即我不能将 group 扩展到尽可能多的单词(由,
可选空格分隔)。呈现的所有正则表达式都带有gm修饰符。
如何得到正确的结果?
特别感谢至少基本的解释,而不仅仅是工作解决方案。
解决方案
您有两种选择,因为 PCER 拥有我们需要的一切。首先使用积极的前瞻:
\w+(?=[^{}]*})
在此处查看现场演示
这是一个方便的解决方法。但是,这一切都取决于您的输入字符串。它表示匹配后跟(不一定立即)右大括号的单词字符,但在到达它时}
不匹配大括号。[{}]
另一种选择是\G
。\G
元字符存在于那些应该从特定点开始的匹配中。\G
表示从上一个匹配结束的地方或从字符串的开头恢复匹配(as \A
):
(?:actionname {|\G(?!\A))(\w+)[, ]*
这个正则表达式的起点就是它看到的地方actionname
。它不会选择交替的另一端,因为我们\G
使用负前瞻来禁用匹配字符串的开头(?!\A)
。匹配后actionname
,它会尝试捕获单词字符并匹配其后的可选逗号和空格。如果g
启用,它将从先前匹配结束的位置恢复匹配。所以它捕获了所有这些词。
在此处查看现场演示
推荐阅读
- opencv - 如何使用 openCV 和 python tesseract 对具有白色前景的文本进行 ocr
- shell - 运行 shell 以检查服务器列表中是否存在目录并在文件中获取输出
- reactjs - 将选定的值传回给父组件 React Hook
- continuous-integration - 使用 GitLab CI/CD 构建和部署与在我自己的机器上做所有事情相比有什么优势?
- python - 如何从python中带有文本和数字的不同元组列表中获取所有字符串
- python - 如何修复python请求错误“期望值”
- kubernetes - Kubernetes入口未更新
- react-native - 在 React Native 中实现一个包含月份和日期的二维数组
- apache-nifi - 在 NiFi 中合并流文件
- reactjs - 在 react 中同时更新 redux 状态