2012-11-07 33 views
2

在這裏,我有例如javascipt的字符串:分割字符串,正則表達式,使其數組沒有空元素

example_string = "Answer 1| Answer 2| Answer 3|"; 

我試圖讓數組像這樣使用正則表達式:

Array ["Answer 1", " Answer 2", " Answer 3"] 

我已嘗試:

result = example_string.split('/[|]+/g'); 

並且還帶有以下模式

'/[|]+/g' 
'/[|]+\b/g' 
'/[|]+[^$]/g' 

而且我仍然得到空元素的數組,在它的結束:

Array ["Answer 1", " Answer 2", " Answer 3", ""] 

這引起了我很大的麻煩。有人知道我在我的模式中犯了什麼錯誤,或者如何解決它?

+0

爲什麼不刪除數組中的最後一項? seeems prety簡單... – gabrjan

+1

只需使用:'example_string.match(/ [^ |] +/g);'。 – ridgerunner

+3

[爲什麼使用包含捕獲組的正則表達式的string.split返回一個以空字符串結尾的數組?](http://stackoverflow.com/questions/38261359/why-does-string-split -with-a-regular-expression-that-c​​ontain-a-capturing-group) – Laurel

回答

3

我一直很喜歡匹配的一切,我總是討厭分裂,但:

正則表達式分裂:(\|(?!$))DEMO

匹配,而不是分裂:

正則表達式:(?:([\w\s]+)\|?)

你甚至可以使用[^\|]+匹配任何你必須匹配的東西但是|

DEMO

+0

你的正則表達式給出了6個元素 – Abubakkar

+0

你是對的似乎比賽好得多然後分裂,我最終最終用它來代替。你的第一個正則表達式工作正常,但現在最後一個數組元素有「|」在字符串的末尾。仍然匹配方法的正則表達式在你提供的站點很好,但我的瀏覽器(Opera和FF)給出了錯誤的結果,因爲每個元素都有「|」在字符串的末尾。我修正了你的正則表達式([\ w \ s] + [^ |])。非常感謝。 – scx

2

沒有錯。這是絕對正確的行爲(split如何知道這不是最後一列有空值的CSV文件?)。如果您知道您的字符串始終以|結尾,您可以先手動刪除最後一個字符串。或者,如果數組爲空,您可以取出數組的最後一個元素。但是,我似乎無法找到一種可能性(用JavaScript)告訴內置的split函數忽略空結果。