正则表达式匹配多个元素

时间:2014-10-10 18:04:26

标签: regex

我有正则表达式,我试图匹配特定的函数参数。我希望能够在语言包中以某种方式设置它们。

以下是我想要匹配的文字:

addFill(path:svgjs.Element, pattern:Pattern, docMaxSide:number) {
    pathFillId(path)
}

在这个例子中,我希望匹配单词" path" "模式"和" docMaxSide"从参数。我想确保它与单词" path"在第二行(我调用pathFillId)。

以下是我目前的正则表达式:\(.*?(\w+):.*?\)

细分:

\(找到空位

.*?它可能有它之前的东西,但是在parens之后

(\w+):在结肠前捕获一个单词

.*?结肠后可能会有更多东西

\)关闭parens

现在,它只匹配第一项,"路径"。但是我需要它来匹配我上面提到的所有单词。

更新:我应该更具体一点。它只应匹配,如果它是一个函数参数。例如,我不希望path1匹配以下内容:var path1:string。困难在于正则表达式只匹配parens之间的项目。

2 个答案:

答案 0 :(得分:1)

试试这个:

\w+(?=:)

使用g修饰符(全局修饰符查找所有元素,但不会在第一次匹配时返回)


另请参阅 example


<小时/> 的更新

如果只想匹配括号中的参数,可以执行以下操作:

\w+(?=:[\w.]+\s*[,)])


这是 example for this regex

答案 1 :(得分:0)

你的问题是正则表达式的这一部分:.*?。所以你指定你想要任何字符(.),这是正确的。但是,您必须决定使用*?之一 - *表示{0,}?表示{0,1}

如果这没有帮助,您可以使用regexe.com或类似方法测试正则表达式。