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

时间:2015-06-08 03:45:24

标签: regex capture square-bracket

我对正则表达式相当新,我想知道要匹配的模式并捕获方括号内的字母。例如,我想从下面的字符串中捕获DATA。我的示例代码如下:

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]);

它给了我一个语法错误:*第二行没有匹配')'*。

3 个答案:

答案 0 :(得分:4)

尝试使用:

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

仅使用大写字母捕获括号。

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

答案 1 :(得分:3)

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

  1. 简单地匹配方括号之间的东西:

    \[(.+)\]
    

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

  2. 在括号和空格后匹配方括号:

    \)\s\[(.+)\]
    
  3. 在正好3个字后匹配方括号:

    (?:[^\s]+\s){3}\[(.+)\]
    
  4. 根据您的需要,您仍然可以更加严格,但您明白了。

    更严格的正则表达式可以防止意外匹配您没有预料到的东西。例如,如果test_module[test_module],那么第一个正则表达式将与之匹配,而另外两个则不会。

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

答案 2 :(得分:0)

在我看来,“最好”的方式是背后的外观和前瞻

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

这样可以避免选择括号

或者也许:

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

更有限的味道