Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 - Fatal编程技术网

什么Javascript正则表达式模式可以用来捕获潜在嵌套括号中的文本?

什么Javascript正则表达式模式可以用来捕获潜在嵌套括号中的文本?,javascript,regex,Javascript,Regex,我有一个字符串,它可以像以下两种类型中的任何一种:调节器,载波3(载波3)或调节器,载波3(载波3(测试)) 我想捕获第一组括号中的内容。我最初的正则表达式模式是\(.+?)\)(非贪婪),因此我可以将文本捕获为组1 这在第一种文本情况下有效,但在第二种文本情况下,它会抓住外括号,例如(Carrier 3(Test)) 是否有一个正则表达式模式可以捕获外圆括号内的文本(可能也包括圆括号)?我想从上面提取Carrier 3或Carrier 3(Test) 编辑:我刚刚被告知,这个数据字段是自由格式

我有一个字符串,它可以像以下两种类型中的任何一种:
调节器,载波3(载波3)
调节器,载波3(载波3(测试))

我想捕获第一组括号中的内容。我最初的正则表达式模式是
\(.+?)\)
(非贪婪),因此我可以将文本捕获为组1

这在第一种文本情况下有效,但在第二种文本情况下,它会抓住外括号,例如
(Carrier 3(Test)

是否有一个正则表达式模式可以捕获外圆括号内的文本(可能也包括圆括号)?我想从上面提取
Carrier 3
Carrier 3(Test)

编辑:我刚刚被告知,这个数据字段是自由格式的文本,因此任何内容都可能出现在外括号内。因此,我需要捕获外括号内的所有内容


编辑2:我给了一个用户正确的答案,因为它回答了原始问题(假设只有一组内括号).现在我知道文本可以是任何东西,Javascript正则表达式模式是不可能的,我放弃了正则表达式方法。我深入到服务器端代码中,找到了所需数据的JSON文本,因此在创建页面/Javascript时,我可以使用数据结构获取所需内容,而不必担心字符串是什么实际上是这样的。感谢所有试图帮助您的人!

您可以使用贪婪版本,当且仅当您的字符串的格式为
word,word(任何内部内容)
而不是
word,word(任何内部内容)word(更多括号内容)

您将获得第一个左括号和最后一个右括号内的所有内容


嵌套深度有限制吗?嵌套的级别有多少?有限的级别可以解析,但JS正则表达式不允许任意级别。问题在Groovy(Java)中,但它也适用于JS。所有字符串的格式是否都是
word,word(里面的任何内容)
您是否分别测试每个字符串?您是否尝试过此重新模式=/((.+)/;?更一般地说,此解决方案假设一对外圆括号。我被告知“单词,单词(任何内部内容)单词(更多括号中的内容)”可能会发生这种情况,因为它是一个自由格式的文本字段,尽管这是一种边缘情况。我可能必须找到另一种方法来获取特定的数据段,而不是依赖DOM节点中的文本并假设只有一对外圆括号。哦,好吧,如果人们甚至被允许放置不平衡的paren,那就更糟糕了!缺少括号和mu多个外部参数…这将是一个连解析器都无法处理的混乱局面。Jerry,我给你一个正确的答案,因为它解决了我原来的问题。因为我刚刚发现我处理的数据是自由格式的,所以我放弃了正则表达式方法。我深入服务器端代码,找到了我需要的数据的JSON文本,这是o在创建页面/Javascript时,我可以使用数据结构获取所需内容,而不必担心字符串的实际外观。@Stephen谢谢。我希望您一切顺利。:)
var selectedOwnerText = /* GET THE TEXT FROM NODE/FIELD/ETC. */, 
    carrierName = '',
    rePattern = /\((.+?)\)/;

    if (selectedOwnerText != '') {
       carrierName = selectedOwnerText.match(rePattern);
       if (carrierName != null) {
          carrierName = carrierName[1];
       }
    }
 // Rest of code...
/\((.+)\)/;