【发布时间】:2014-12-05 17:40:52
【问题描述】:
我是 Regex 的新手,学习了一些教程,但很难做到这一点。
我正在为文本编辑器的 TypeScript 提供语言支持,我需要一个与函数中的输入信息匹配的正则表达式。例如:
function asdf(param1:type1, param2:type2, param3:type3) {...}
我的正则表达式应该匹配“type1”、“type2”、“type3”等。
这是我正在尝试的:
\(.+?:(\w).+?\)
这样分解:
\(寻找起始括号
.+?: 任意数量的字符,直到冒号
(\w)捕获组:下一个词
.+?这后面可能还有字
\) 函数参数末尾的右括号。
不知道我做错了什么,但就像我说的我是正则表达式的新手。目前它捕获了整个东西,从开始的括号到结束的括号。我需要它来匹配冒号后的单个单词。
注意:我想确保它只匹配括号内冒号之后的单词,这样它就不会匹配在 Javascript 中看起来相似的对象键/数据组合。
谢谢!
【问题讨论】:
-
您使用的正则表达式引擎是什么?
-
这将用于 Atom 文本编辑器,所以我认为它最终是 Javascript,因为它是使用 Web 技术构建的。
-
问这个问题的更一般的方法是:如何在正则表达式查询中包含字符而不让它们成为匹配的一部分?例如,如果我想要冒号 (:) 之后的单词,我可以在不匹配冒号的情况下包含冒号吗?
-
javascript 正则表达式引擎并不能真正做到这样的事情。你可以用这种模式作弊:
[^:)]+(?=,[^()]*\)|\))但请注意,这不会检查左括号。 -
使用更高级的正则表达式引擎 (perl/php/java/.net),您可以编写:
(?:\G(?!\A), |\()[^:]+:\K[^,)]+(?=[^()]*\))更健壮。
标签: javascript regex typescript