【问题标题】:Regex to capture typed information in TypeScript正则表达式在 TypeScript 中捕获类型化信息
【发布时间】: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


【解决方案1】:

试试看

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
}

如何使用

   getParamNames("function asdf(param1:type1, param2:type2, param3:type3) {...}");

参考

How to get function parameter names/values dynamically from javascript

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2016-03-21
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多