如何用正则表达式匹配特定表达式后所有逗号分隔的单词
匹配let/var后所有逗号分隔单词的正则方案
你当前使用的正则\b(?:let|var)\s+(\w+)仅能捕获第一个变量名,原因是没有对后续逗号分隔的变量片段做匹配逻辑,可根据你使用的正则引擎支持特性选择以下方案:
方案1:支持\G连续匹配锚点的引擎(PCRE、Java、.NET、JS ES2018+等)
使用以下正则可一次性匹配出所有目标变量名,每个变量名单独存在于捕获组1中:
(?:\b(?:let|var)\s+|\G(?!^),\s*)(\w+)
正则逻辑说明:
- 非捕获组的第一个分支
\b(?:let|var)\s+用于匹配声明关键字let/var以及其后的空白符,作为整组匹配的起始位置 - 非捕获组的第二个分支
\G(?!^),\s*表示从上一次匹配结束的位置开始,匹配分隔逗号以及逗号前后的空白符,其中(?!^)用于避免误匹配字符串起始位置 - 最终的
(\w+)会逐次捕获每一个逗号分隔的变量名
方案2:不支持\G锚点的引擎
可以先通过正则匹配完整的声明语句,捕获所有变量组成的整段字符串,再通过字符串拆分拿到所有变量名:
第一步匹配整段声明的正则:
\b(?:let|var)\s+((?:\w+\s*,\s*)*\w+)
匹配完成后,捕获组1会拿到类似foo, bar, test的变量整段内容,你只需要对这段内容按逗号做分割,去除每个片段前后的空白,即可得到所有变量名列表。
原问题匹配效果参考:
内容的提问来源于stack exchange,提问作者Hassan Taleb
相关产品推荐
相关产品推荐

