我有正则表达式,我试图匹配特定的函数参数。我希望能够在语言包中以某种方式设置它们。
以下是我想要匹配的文字:
addFill(path:svgjs.Element, pattern:Pattern, docMaxSide:number) {
pathFillId(path)
}
在这个例子中,我希望匹配单词" path" "模式"和" docMaxSide"从参数。我想确保它与单词" path"在第二行(我调用pathFillId)。
以下是我目前的正则表达式:\(.*?(\w+):.*?\)
细分:
\(
找到空位
.*?
它可能有它之前的东西,但是在parens之后
(\w+):
在结肠前捕获一个单词
.*?
结肠后可能会有更多东西
\)
关闭parens
现在,它只匹配第一项,"路径"。但是我需要它来匹配我上面提到的所有单词。
更新:我应该更具体一点。它只应匹配,如果它是一个函数参数。例如,我不希望path1
匹配以下内容:var path1:string
。困难在于正则表达式只匹配parens之间的项目。
答案 0 :(得分:1)
试试这个:
\w+(?=:)
使用g
修饰符(全局修饰符查找所有元素,但不会在第一次匹配时返回)
另请参阅 example
如果只想匹配括号中的参数,可以执行以下操作:
\w+(?=:[\w.]+\s*[,)])
答案 1 :(得分:0)
你的问题是正则表达式的这一部分:.*?
。所以你指定你想要任何字符(.
),这是正确的。但是,您必须决定使用*
和?
之一 - *
表示{0,}
,?
表示{0,1}
。
如果这没有帮助,您可以使用regexe.com或类似方法测试正则表达式。