正则表达式用于解析括号中的值

时间:2017-11-02 03:09:35

标签: javascript regex parsing

我希望能够通过按空格分割将字符串分隔为值,但如果括号中有内容,则需要将其放在单个值中。例如,(a b c) d e (f g) h应该变为['a b c', 'd', 'e', 'f g', 'h']。什么是正则表达式会对我这样做?

2 个答案:

答案 0 :(得分:2)

正如评论中所提到的,处理正则表达式中的嵌套是不可能的,所以这是一个处理问题的代码;它使用正则表达式和其他技术:



SELECT
    t1.date,
    t2.cnt1,
    t3.cnt2
FROM calendar t1
LEFT JOIN
(
    SELECT date, COUNT(id) AS cnt1
    FROM windows
    WHERE start_date BETWEEN '2017-01-01' AND '2017-10-31'
    GROUP BY date
) t2
    ON t1.date = t2.date
LEFT JOIN
(
    SELECT date, COUNT(id) AS cnt2
    FROM AIX
    WHERE start_date BETWEEN '2017-01-01' AND '2017-10-31'
    GROUP BY date
) t3
    ON t1.date = t3.date;




可能没有优化,但我认为它可以解决您的问题。

答案 1 :(得分:0)

是的,标准JavaScript正则表达式引擎无法处理嵌套模式。如果您使用Perl,PHP或.NET,则可以使用类似this的模式:

(?(DEFINE)
  (?<open>\()
  (?<close>\))
  (?<val>(?&open)|(\w\s?)+)
  (?<start>(?&open)(?&val)(?&close))
)
(?&start)|(?<=\s)\w

也可以使用像XRegExp这样的扩展JavaScript正则表达式库在JavaScript中完成。这是一个示例,为您提供想法:

const str1 = '(a b c) d e (f g) h';
var s = XRegExp.matchRecursive(str1, '\\(', '\\)', 'g');
console.log(s);
// -> ['a b c', 'f g']