Javascript 用于在TypeScript中捕获键入信息的正则表达式
我是新来的正则表达式,参加了一些教程,很难做到这一点 我正在为文本编辑器开发TypeScript语言支持,我需要一个只匹配函数中键入信息的正则表达式。例如:Javascript 用于在TypeScript中捕获键入信息的正则表达式,javascript,regex,typescript,Javascript,Regex,Typescript,我是新来的正则表达式,参加了一些教程,很难做到这一点 我正在为文本编辑器开发TypeScript语言支持,我需要一个只匹配函数中键入信息的正则表达式。例如: function asdf(param1:type1, param2:type2, param3:type3) {...} 在这种情况下,我的正则表达式应该与“type1”、“type2”、“type3”等匹配 以下是我正在尝试的: \(.+?:(\w).+?\) 分解如下: \(查找起始括号 +?:冒号之前的任意字符数 (\w)捕获组
function asdf(param1:type1, param2:type2, param3:type3) {...}
在这种情况下,我的正则表达式应该与“type1”、“type2”、“type3”等匹配
以下是我正在尝试的:
\(.+?:(\w).+?\)
分解如下:
\(
查找起始括号
+?:
冒号之前的任意字符数
(\w)
捕获组:下一个单词
+?
这之后可能还有其他单词
\)
函数参数末尾的右括号
我不确定我做错了什么,但就像我说的,我对regex是新手。目前,它捕获了从开始到结束的全部内容。我需要它只匹配冒号后面的单个单词
注意:我想确保它只匹配parens中冒号后面的单词,这样它就不会匹配objectkey/data组合,它们在Javascript中看起来很相似
谢谢 试试看
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var ARGUMENT_NAMES = /([^\s,]+)/g;
function getParamNames(func) {
var fnStr = func.toString().replace(STRIP_COMMENTS, '')
var result = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(ARGUMENT_NAMES)
if(result === null)
result = []
for(i=0; i< result.length; i++)
result[i]=result[i].split(":")[1];
return result
}
参考文献
您使用的正则表达式引擎是什么?这将用于Atom文本编辑器,因此我假设它最终是Javascript,因为它是使用web技术构建的。问这个问题的一个更一般的方法是:如何在正则表达式查询中包含字符,而不让它们成为匹配的一部分?例如,如果我想在冒号(:)之后添加单词,我是否可以在不匹配冒号的情况下包含冒号?javascript正则表达式引擎并不能真正做到这一点。你可以用这种模式作弊:
[^:]+(?=,[^()]*\)\124;\)
,但请注意,这并没有检查左括号。使用更高级的正则表达式引擎(perl/php/java/.net),你可以编写:(?:\G(?!\a),\124;\()[^:+:\ K[^,)]+(?=[^()]*\)
,这样更健壮。
getParamNames("function asdf(param1:type1, param2:type2, param3:type3) {...}");