Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于在TypeScript中捕获键入信息的正则表达式_Javascript_Regex_Typescript - Fatal编程技术网

Javascript 用于在TypeScript中捕获键入信息的正则表达式

Javascript 用于在TypeScript中捕获键入信息的正则表达式,javascript,regex,typescript,Javascript,Regex,Typescript,我是新来的正则表达式,参加了一些教程,很难做到这一点 我正在为文本编辑器开发TypeScript语言支持,我需要一个只匹配函数中键入信息的正则表达式。例如: function asdf(param1:type1, param2:type2, param3:type3) {...} 在这种情况下,我的正则表达式应该与“type1”、“type2”、“type3”等匹配 以下是我正在尝试的: \(.+?:(\w).+?\) 分解如下: \(查找起始括号 +?:冒号之前的任意字符数 (\w)捕获组

我是新来的正则表达式,参加了一些教程,很难做到这一点

我正在为文本编辑器开发TypeScript语言支持,我需要一个只匹配函数中键入信息的正则表达式。例如:

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) {...}");