Javascript 字符串中最后两个括号之间的所有大写字母的正则表达式
我试图得到字符串中最后两个括号之间的所有大写字母。到目前为止,我已经尝试过:Javascript 字符串中最后两个括号之间的所有大写字母的正则表达式,javascript,regex,expression,Javascript,Regex,Expression,我试图得到字符串中最后两个括号之间的所有大写字母。到目前为止,我已经尝试过: /\(([A-Z])([^)]*)\)[^(]*$/g 例如:我不想要(这些词),我想要(这两个) 但它给了我: 第一组T 第2组这两个 有人能帮我吗 提前谢谢 您可以获得JavaScript中括号之间最后一个字符串之间的所有大写字母,如下所示: /(?!.*\()(?=.*\))([A-Z])/g 其中第一部分(?!.\(.*)是一个否定的前瞻,它忽略所有的左括号,并在最后一个括号之后立即停止。然后我们执行一个积
/\(([A-Z])([^)]*)\)[^(]*$/g
例如:我不想要(这些词),我想要(这两个)
但它给了我:
第一组<代码>T
第2组<代码>这两个
有人能帮我吗
提前谢谢 您可以获得JavaScript中括号之间最后一个字符串之间的所有大写字母,如下所示:
/(?!.*\()(?=.*\))([A-Z])/g
其中第一部分(?!.\(.*)
是一个否定的前瞻,它忽略所有的左括号,并在最后一个括号之后立即停止。然后我们执行一个积极的前瞻,它匹配所有内容,直到遇到右括号。然后我们匹配大写字母。代码
var s=“我不想要(这些词),我想要(这两个)”
变量r=/.\([^)]*)\)/
var m=r.exec(s)
console.log(m[1].match(/[A-Z]/g))
我认为,最短最简单的解决方案是:
-消极前瞻-以后不会发生任何情况 左括号(在任意数量的其他字符之后)(?!.\()
-正向前瞻-以后一定会有 在右括号中出现(在任意数量的其他字符之后)(?=.*\)
-捕获大写字母,而不是捕获组, 但作为一场“正常”的比赛[A-Z]
-带有全局选项g
/(?!.*\()(?=.*\))[A-Z]/g
所以你想要所有的字母,而不仅仅是大写字母?你想要什么答案?如果你得到最后一个开始括号的索引,然后得到最后一个结束括号的索引,然后得到这些索引之间的子字符串,然后得到大写字母,那么维护起来会更容易。即使你的正则表达式正常工作,你也不可能在几个月内理解正则表达式。你的字符串能有很多括号吗?是否存在括号不匹配的错误情况?或者,您总是只需要处理两个错误条件吗?谢谢,但是在一个表达式中没有这样做的方法吗?s、 match(/.*([^)]*)./)[1]。match(/[A-Z]/g)。join(“”)可以工作,但如果我能把它放在1中会更好regex@TimVN为什么人们总是这样问?哈哈。。。当您谈论可变长度元素的可能性时,它是,但不是在JavaScript中。如果你总是有两个单词,你可以使用
*\([A-Z])[^A-Z]([A-Z])
,并获得第一个和第二个捕获组。但是,当你增加这个可能或多或少的时候,你的表达式就会变得非常复杂:*([A-Z])([A-Z])(?:[^A-Z]([A-Z])?
->1或2,*([A-Z])([A-Z])([A-Z])([A-Z])([A-Z])([A-Z]))?
->1、2或3等@TimVN在其他正则表达式引擎中这是可能的。JavaScript的正则表达式支持并不出色。例如,PCRE允许\G
和\K
,这使得这非常简单:但这些在JavaScript中不可用。您可以不使用\K
这样做:,但在JavaScript中也不支持\G
JavaScript@TimVN C#也允许这样做(不带\G
标记),但这是因为它保留了所有捕获: