2013-02-15 186 views
-2

我有以下內容的行:正則表達式的多個匹配

"word1 word2 word3 (compound word) ..." 

我需要一個正則表達式分隔單詞到一個數組,考慮在括號中的詞作爲一個字並用空格隔開的其餘部分。

+0

可以合成詞嵌套? I.E. '「word1(化合物(另一種化合物))word2」' – Kyle 2013-02-15 21:55:59

+0

不,只有一個級別。葡萄牙語單詞列表及其括號中的翻譯。 – 2013-02-18 15:58:23

回答

3
BARE_WORD  = /([^\(\s]\S*)/ 
COMPOUND_WORD = /\(([^\)]*)\)/ 
SCANNER  = /(?:#{BARE_WORD})|(?:#{COMPOUND_WORD})/ 

def split_bare_and_parenthesized_words str 
    str.scan(SCANNER).flat_map(&:compact) 
end 

split_bare_and_parenthesized_words "word1 word2 word3 (compound word) ..." 
#=> ["word1", "word2", "word3", "compound word", "..."] 

該實現不會處理嵌套parens。這些條件在使用常規語言時本質上很難。

(編輯:@DavidUnric指出OP意味着他不希望在結果中括號所以我們增加捕獲和flat_map減少到匹配的備用。)

+0

結果中應該沒有parens,只是他們周圍的內容。 – 2013-02-16 11:14:39

-1

試試這個: http://jsfiddle.net/WtfCA/

function test(str) { 
    var bracketStr = str.match(/\([a-z]*\s[a-z]*\)/g, "temp")[0]; 
    var temp = str.replace(/\([a-z]*\s[a-z]*\)/g, "temp").split(" "); 
    var final = temp.join("+").replace(/temp/, bracketStr).split("+"); 
    console.log(final); 
} 
0

爲分割也可以採取正則表達式可以很容易地分割字符串的要求:

irb> "word1 word2 word3 (compound word)".split(/ *\((.*)\) *| /) 
=> ["word1", "word2", "word3", "compound word"] 

即。被任意數量的空間或單個空間包圍的parens分割。

0
"word1 word2 word3 (compound word) ...".scan(/\(.*?\)|\S+/)