正则表达式:最后一个左括号之前的单词

标签 regex

我对 RegEx 有一点了解,但目前远远超出了我的能力范围。

我需要帮助来查找最后一个左括号之前没有匹配的右括号的文本。

(正在开发的开源软件CallTip。)

下面是一些示例:

--------------------------
Text               I need
--------------------------
aaa(                  aaa
aaa(x)                ''
aaa(bbb(              bbb
aaa(y=bbb(            bbb
aaa(y=bbb()           aaa
aaa(y <- bbb()        aaa
aaa(bbb(x)            aaa
aaa(bbb(ccc(          ccc
aaa(bbb(x), ccc(      ccc
aaa(bbb(x), ccc()     aaa
aaa(bbb(x), ccc())    ''
--------------------------

是否可以为这些情况编写正则表达式(PCRE)?

我得到的最好的是 \([^\(]+$ 但是,它不好,而且与我需要的相反。

有人可以帮忙吗?

最佳答案

enter image description here

看看这个 JavaScript 函数

var recreg = function(x) {
var r = /[a-zA-Z]+\([^()]*\)/;
while(x.match(r)) x = x.replace(r,'');
return x
}

应用此后,您将留下所有不匹配的部分,这些部分没有右括号,我们只需要最后一个字母单词。

var lastpart = function(y) { return y.match(/([a-zA-Z]+)\([^(]*$/); }}

这个想法是像这样使用它

 lastpart(recreg('aaa(y <- bbb()'))

然后检查结果是否为 null,否则采用匹配组,即 result[1]。大多数正则表达式引擎不支持递归正则表达式匹配所需的 ?R 标志。

请注意,这是一个模拟递归正则表达式的 JavaScript 表示示例。 阅读 http://www.catonmat.net/blog/recursive-regular-expressions/

关于正则表达式:最后一个左括号之前的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16952821/

相关文章:

javascript - 从 html 文本中提取所有 css 类

javascript - 使用正则表达式删除html元素并保留内容

regex - 如何使用 stringr 和 regexp 删除字符串末尾的空格和数字?

java - 将所有非字母数字更改为 +

javascript - 小于或大于除 html 标签之外的字符?

c# - 如何将字符串中单词之间的每个数字作为单独的值进行替换

javascript - 我可以在 querySelectorAll 中使用正则表达式吗?

java - 在 Java 中尝试使用正则表达式提取 XMLNS

java - HtmlUnit 单击具有相同名称的链接引用中的特定链接

regex - 如何将字符串按 4 分组?