Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 字符串中最后两个括号之间的所有大写字母的正则表达式_Javascript_Regex_Expression - Fatal编程技术网

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
标记),但这是因为它保留了所有捕获: