【问题标题】:Regex to find first opening and last closing bracket to split in JS正则表达式查找要在 JS 中拆分的第一个左括号和最后一个右括号
【发布时间】:2017-07-10 11:24:44
【问题描述】:

tl;dr:我想在 JavaScript 中的第一个左括号和最后一个右括号中分隔一个字符串:

"abc(def)ghi"                ==>    ["abc", "def", "ghi"]
"abc(def(ghi)jkl)mno"        ==>    ["abc", "def(ghi)jkl", "mno"]
"abc(def(ghi(jkl)mno)pqr"    ==>    ["abc", "def(ghi(jkl)mno", "pqr"]
"abc(def(ghi)jkl)mno)pqr"    ==>    ["abc", "def(ghi)jkl)mno", "pqr"]

我尝试使用

"abc(def(ghi)jkl)mno".split(new RegExp('\\\(|\\\)'))

但这似乎匹配每个括号并给我["abc", "def", "ghi", "jkl", "mno"]。 我也试过这个:

"abc(def(ghi)jkl)mno".split(new RegExp('\\\((?:.*)\\\)'))

但这似乎也与括号内的整个部分匹配,并给了我["abc", "mno"]

有没有办法只在第一个开括号和最后一个右括号分开?

【问题讨论】:

  • 非正则表达式解决方案可能更快、更优雅:stackoverflow.com/questions/34648186/…
  • @ThomasMoors 提到的非正则表达式解决方案:var i = str.indexOf('('), j = str.lastIndexOf(')', i+1), arr = !== -1 && j > i[str.substr(0,i), str.substr(i+1, j), str.substr(j+1)]: [str];

标签: javascript regex split


【解决方案1】:

JavaScript 似乎在结果数组中包含来自 split 函数中使用的正则表达式的匹配项。这是对我有用的代码:

"abc(def(ghi)jkl)mno".split(new RegExp('\\((.*)\\)'))

它给了我:["abc", "def(ghi)jkl", "mno"]

它捕获了左括号和右括号之间的所有内容。正则表达式似乎有中间部分是贪婪的。

(我在写这个问题的时候偶然发现了这个)

【讨论】:

    【解决方案2】:

    你可以这样做

    var a1="abc(def)ghi";
    var a2="abc(def(ghi)jkl)mno";
    var a3="abc(def(ghi(jkl)mno)pqr";
    var a4="abc(def(ghi)jkl)mno)pqr";
    
    a1 = a1.split(new RegExp('\\((.*)\\)'));
    a2 = a2.split(new RegExp('\\((.*)\\)'));
    a3 = a3.split(new RegExp('\\((.*)\\)'));
    a4 = a4.split(new RegExp('\\((.*)\\)'));
    
    console.log(a1);
    console.log(a2);
    console.log(a3);
    console.log(a4);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2021-09-22
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多