Javascript - 按空格分割

时间:2012-05-17 09:56:38

标签: javascript regex split whitespace

我需要用空格分割字符串,但不能在“()”或“[]”中找到空格。我从这里找到了几个类似的问题,但我找不到理想的解决方案。

我要解析的字符串看起来像这样(方括号也可以用常规括号替换):

  

(1)“有些文字[更多文字]”

     

(2)“有些文字[更多文字]”

我希望他们像这样分开:

  

(1)[“Some”,“text”,“[more text]”]

     

(2)[“Some”,“text [more text]”]

Javascript - divide by spaces unless within brackets   - 这个问题非常相似,答案在第一(1)情况下效果很好。但在第二种情况下,它并没有那么好用。拆分后,它看起来像这样:

  

[“Some”,“text [more”,“text]”]

有没有一种简单的方法来实现我想要的目标?

3 个答案:

答案 0 :(得分:1)

这些似乎有效:

1: \[[^\]]+\]|\S+\[[^\]]+\]|\S+
2: \[[^\]]+\]|(\S(\[[^\]]+\])?)+
3: (\S+)?\[[^\]]+\]|\S+

根据Regex Hero,第一个是远远优越的,而Miguel的答案稍微快一些。

答案 1 :(得分:0)

尝试(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)

var a = "Some text [more text]";
var b = "Some text[more text]";

结果是:

a.match(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)

[“某些”,“文字”,“[更多文字]”]

b.match(/(\w+ )|(\w+)?((\[|\().*(\]|\))$)/g)

[“Some”,“text [more text]”]

答案 2 :(得分:0)

使用此正则表达式:

/(\w+)?(\([^\)]*?\)|\[[^\]]*?\])(\w+)?|\w+/g

<强> Samples

console.log( 'Some(1) text [more text]'.match(regex) );
//Output-> ["Some(1)", "text", "[more text]"]

console.log( '(2) Some text[more text]'.match(regex) );
//Output-> ["(2)", "Some", "text[more text]"]

console.log( '(3 45)Some text[more text]'.match(regex) );
//Output-> ["(3 45)Some", "text[more text]"]