你需要寫(xiě)一個(gè)復(fù)雜的正則表達(dá)式。
使用 CoffeeScript 的 “heregexes” ——可以忽視內(nèi)部空白字符并可以包含注釋的擴(kuò)展正則表達(dá)式。
pattern = ///
^\(?(\d{3})\)? # 采集區(qū)域代碼,忽略可選的括號(hào)
[-\s]?(\d{3}) # 采集前綴,忽略可選破折號(hào)或空格
-?(\d{4}) # 采集行號(hào),忽略可選破折號(hào)
///
[area_code, prefix, line] = "(555)123-4567".match(pattern)[1..3]
# => ['555', '123', '4567']
通過(guò)打破復(fù)雜的正則表達(dá)式和注釋重點(diǎn)部分,它們變得更加容易去辨認(rèn)和維護(hù)。例如,現(xiàn)在這是一個(gè)相當(dāng)明顯的做法去改變正則表達(dá)式以容許前綴和行號(hào)之間存在可選的空間。
空白字符在 heregexes 中是被忽視的——所以如果要為 ASCII 空格匹配字符,你應(yīng)該怎么做呢?
我們的解決方案是使用 @\s@ 字符組,它能夠匹配空格,制表符和換行符。假如你只想匹配一個(gè)空格,你需要使用 \X20 來(lái)表示字面上的 ASCII 空格。