我对正则表达式相当新,我想知道要匹配的模式并捕获方括号内的字母。例如,我想从下面的字符串中捕获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]);
它给了我一个语法错误:*第二行没有匹配')'*。
答案 0 :(得分:4)
尝试使用:
\[([A-Z]+)\]
仅使用大写字母捕获括号。
两个将两个或多个字符串匹配到括号中,使用/g
进行全局选择。
答案 1 :(得分:3)
根据测试字符串的相似程度以及您希望正则表达式的严格程度,您可以选择从不严格到更严格的选项:
简单地匹配方括号之间的东西:
\[(.+)\]
在这种情况下,你可能想要一个非贪婪的正则表达式。因为如果括号之间有2个不同的东西,例如[AB] some text [CD]
它会捕获AB] some text [CD
。非贪婪的旗帜会阻止这种情况发生。
在括号和空格后匹配方括号:
\)\s\[(.+)\]
在正好3个字后匹配方括号:
(?:[^\s]+\s){3}\[(.+)\]
根据您的需要,您仍然可以更加严格,但您明白了。
更严格的正则表达式可以防止意外匹配您没有预料到的东西。例如,如果test_module
为[test_module]
,那么第一个正则表达式将与之匹配,而另外两个则不会。
当字符串完全或部分由用户输入组成时,这一点尤为重要。永远不要相信用户;)
答案 2 :(得分:0)
在我看来,“最好”的方式是背后的外观和前瞻
(?<=\[)[A-Z]+?(?=\])
这样可以避免选择括号
或者也许:
\[([A-Z]+?)\]
更有限的味道