2012-05-17 73 views
0

我需要用空格分割一個字符串,但不能在「()」或「[]」中找到空格時。我發現了幾個類似的問題,但我找不到理想的解決方案。Javascript - 按空格拆分

我想分析可以這個樣子(方括號還可以與常規支架取代)的字符串:

(1) 「一些文本[更多文本]」

(2) 「一些文本[更多文本]」

我希望他們能夠像這樣被分開:

(1) 「有些」,「T轉」, 「[更多文本]」]

(2) 「有些」, 「文[更多文本]」]

Javascript - divide by spaces unless within brackets - 這個問題是非常相似,而答案的作品真的很好在第一(1)的情況。但在第二種情況下,這種情況並不理想。分開後,它看起來像這樣:

[ 「有些」, 「文[更多」, 「文]」]

有一個簡單的方法可以達到我想要什麼?

+0

應該發生什麼嵌套括號? – Bergi

+0

嵌套括號會導致錯誤,所以不需要擔心在這種情況下會發生什麼。我應該更具體。 –

回答

1

這些似乎工作:

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

根據Regex Hero第一個是遠遠優於,和Miguel的回答稍微快一點還是。

+0

感謝您的回答,但根據Chrome的控制檯,此RegExp的結果是:[「一些」,「文本[更多」,「文本」]] - 這是我使用從答案中找到的方法獲得的相同結果I鏈接。 [「一些」,「文本[更多文本]」]將是正確的行爲。 –

+0

是的,這實際上比你擁有的還差。除非有人打我,否則我會再看一次。 – mkjeldsen

+0

那裏。也許有更高效的模式。 – mkjeldsen

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) 

[「一些「,」text [more text]「]

+0

增加了對'('和')'的支持。 –

0

使用t他的正則表達式:

/(\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]"]