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