0

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

我要解析的字符串可以是这样的(方括号也可以用普通括号代替):

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

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

我希望他们像这样分开:

(1) [“一些”、“文本”、“[更多文本]”]

(2) [“一些”、“文本[更多文本]”]

Javascript - 除非在括号内,否则除以空格 - 这个问题非常相似,答案在第一种 (1) 情况下非常有效。但在第二种 (2) 情况下,它并不能很好地工作。拆分后是这样的:

[“一些”,“文本[更多”,“文本]”]

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

4

3 回答 3

1

这些似乎有效:

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

根据Regex Hero的说法,第一个要好得多,而 Miguel 的回答还要快一些。

于 2012-05-17T10:08:02.530 回答
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)

[“一些”,“文本[更多文本]”]

于 2012-05-17T10:34:26.007 回答
0

使用这个正则表达式:

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

样品

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]"]
于 2012-05-17T11:04:08.397 回答