匹配并捕获方括号内的(大写)字母

Match and capture the (capital) letters inside the square brackets

我对正则表达式还很陌生,我想知道匹配和捕获方括号内字母的模式。例如,我想从下面的字符串中捕获数据。我的示例代码如下:

var myString = "testing/node/234 test_TEST [1234] testing [DATA] SUMMARY,VALUES,abcd,1,0,0";
var re = new RegExp("\[([A-Z]+)\]");
var match = re.exec(myString);
console.log(match[1]);

它给我一个语法错误:* Unmatched ')' * 在第二行。

尝试使用:

\[([A-Z]+)\]

只捕获大写字母的括号。

Two 将两个或多个字符串匹配到括号中,使用/g进行全局选择。

根据测试字符串的相似程度以及您希望正则表达式的严格程度,您有多种选择,从不太严格到更严格:

  1. 只需匹配方括号之间的内容:

    \[(.+)\]
    

    在这种情况下,您可能需要一个非贪婪的正则表达式。因为如果括号之间有 2 个不同的东西,例如[AB] some text [CD] 它将捕获 AB] some text [CD。非贪婪标志将阻止这种情况。

  2. 匹配右括号后的方括号和space:

    \)\s\[(.+)\]
    
  3. 匹配恰好3个单词后的方括号:

    (?:[^\s]+\s){3}\[(.+)\]
    

您仍然可以根据需要更加严格,但您明白了。

更严格的正则表达式 将防止意外匹配您没有预料到的内容。例如,如果 test_module 本来是 [test_module],则第一个正则表达式会匹配它,而其他两个则不会。

当字符串完全或部分由用户输入组成时,这一点尤为重要。永远不要相信用户 ;)

我认为 "best" 的方法是回顾和展望

(?<=\[)[A-Z]+?(?=\])

这也将避免选择括号

或者也许:

\[([A-Z]+?)\]

味道更有限