根据空格但在方括号内分割正则表达式

时间:2018-06-23 11:42:23

标签: javascript regex

面临的问题:

我想根据空格组分割一个字符串,但是如果它们在方括号内,则不要。

示例: print(account.root.all()) # QuerySet(q=Q(), folders=[Root (root)]) 应该给我 "abc { def ghi Klm} opqr"

所需解决方案:

要做到这一点,最易读,最有效的正则表达式是什么?

我知道可以这样分割空间:

["abc", "{    def ghi     Klm}", "opqr"]

但是我不知道该怎么走。

重复的分辨率

这个问题确实已经解决了here(尽管在C#中)。道歉

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式进行匹配:

/{[^}]*}|\S+/g

RegEx Demo

此正则表达式使用{[^}]*}来匹配大括号之间的字符串,或者使用\S+来匹配1+个非空白字符。

代码:

const regex = /{[^}]*}|\S+/gm;
const str = `abc    {    def ghi     Klm}    opqr`;
let m = str.match(regex);

console.log(m);

答案 1 :(得分:1)

在正则表达式中有一种“二元论”,即相同的任务 可以使用图案分割或 匹配其“否定”。

在您的情况下,由于Java风格的正则表达式存在某些限制, 匹配变量更好。使用:/{[^}]*}|\S+/g查找 在您的文本中匹配。

它包含2种选择:

  • {[^}]*}-开括号,}以外的其他字符 和}
  • \S+-除空格/制表符/换行符以外的非空字符序列。

示例代码,在rextester.com上进行了测试,仅使用了 print 用于测试打印输出:

var txt = 'abc    {    def ghi     Klm}    opqr xxx';
var res = txt.match(/{[^}]*}|\S+/g);
print("Length: " + res.length);
for (var j in res) {
    print(res[j]);
}