我有以下內容的行:正則表達式的多個匹配
"word1 word2 word3 (compound word) ..."
我需要一個正則表達式分隔單詞到一個數組,考慮在括號中的詞作爲一個字並用空格隔開的其餘部分。
我有以下內容的行:正則表達式的多個匹配
"word1 word2 word3 (compound word) ..."
我需要一個正則表達式分隔單詞到一個數組,考慮在括號中的詞作爲一個字並用空格隔開的其餘部分。
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減少到匹配的備用。)
結果中應該沒有parens,只是他們周圍的內容。 – 2013-02-16 11:14:39
試試這個: 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);
}
爲分割也可以採取正則表達式可以很容易地分割字符串的要求:
irb> "word1 word2 word3 (compound word)".split(/ *\((.*)\) *| /)
=> ["word1", "word2", "word3", "compound word"]
即。被任意數量的空間或單個空間包圍的parens分割。
"word1 word2 word3 (compound word) ...".scan(/\(.*?\)|\S+/)
可以合成詞嵌套? I.E. '「word1(化合物(另一種化合物))word2」' – Kyle 2013-02-15 21:55:59
不,只有一個級別。葡萄牙語單詞列表及其括號中的翻譯。 – 2013-02-18 15:58:23