2010-09-12 70 views
5

我有一個JavaScript正則表達式,基本上可以找到兩個字母的單詞。問題似乎是它將重音字符解釋爲字邊界。實際上,似乎我該如何製作一個正則表達式來考慮重音字符?

詞邊界(「\ B」)是一個點的字符 兩者之間,有一個「\ W」 在其一側,並且「\ W」上 其他(按任一順序), 將虛數字符關閉 字符串的開頭和結尾爲匹配「\ W」的 。 AS3 RegExp to match words with boundry type characters in them

而且,由於

\瓦特任何字母數字字符 (字字符)包括 下劃線匹配(短和[a-ZA-Z0-9_])。 \ W任何非字匹配的字符 (簡稱[^ A-ZA-Z0-9_]) http://www.javascriptkit.com/javatutors/redev2.shtml

明顯重音字符不考慮。這成爲一個問題,如Montréal。如果é被視爲單詞邊界,則al是一個雙字母單詞。我試圖讓自己的字邊界允許重音字符的定義,但看到作爲字邊界甚至不是一個字符,我不完全知道如何去尋找它..

任何幫幫我?

下面是相關的JavaScript代碼,搜索userInput和使用re_state正則表達式查找兩個字母的單詞:

var re_state = new RegExp("\\b([a-z]{2})[,]?\\b", "mi"); 
var match_state = re_state.exec(userInput); 
document.getElementById("state").value = (match_state)?match_state[1]:""; 

回答

-3

有您設置的JavaScript使用非ASCII? 這裏是一個網頁 是建議設置的JavaScript使用UTF-8: http://blogs.oracle.com/shankar/entry/how_to_handle_utf_8

它說:

添加charset屬性 (字符集= 「utf-8」),以腳本標記 父頁面:

script type="text/javascript" src="[path]/myscript.js" charset="utf-8" 
+0

這並沒有改變什麼...... – Shawn 2010-09-12 17:12:47

+0

呀,type屬性是不是即使在HTML5因爲它不是沒有瀏覽器的支持,這是人們在解釋規範時犯的一個錯誤。 charset元標記起作用,但鏈接中的charset不是真實的。 – 2010-09-12 18:00:52

+0

@Rich Bradshaw:我的頭部有。你是這個意思嗎? – Shawn 2010-09-12 18:15:02

4

雖然JavaScript的正則表達式承認在某些情況下,非ASCII字符(如\s),當涉及到\w\b時,它是絕望的不足。如果您希望它們處理ASCII字符以外的任何內容,則必須使用不同的語言,或者使用Unicode plugin安裝Steve Levithan的XRegExp庫。

順便說一句,你的正則表達式有錯誤。你有可選尾隨逗號後面\b,但它應該是在前面:

"\\b([a-z]{2})\\b,?" 

我也去掉了方括號;如果逗號在正則表達式中有特殊的含義,那麼你只需要這些。但我懷疑你根本不需要匹配逗號; \b應該足以確保你在單詞的最後。如果你不需要逗號,你不需要捕獲組之一:

"\\b[a-z]{2}\\b" 
+0

@Alan Moore:使用文字和構造函數有什麼區別?例如:var re_address = new RegExp(match_buildingNumber [0] + match_street [0] + match_city [0])如果我使用構造函數,我可以將以前正則表達式的匹配添加到我的正則表達式中。 +「?」,「mi」);這種事情,對我的知識來說,使用正則表達式文字是不可能的...... – Shawn 2010-09-12 17:22:59

+0

好吧,如果您有充分的理由使用構造函數,請務必使用它。我只是想確保你知道正則表達式選項。 – 2010-09-12 17:41:30

+0

@Alan Moore:好的謝謝!但我仍然有點好奇......兩者有什麼不同?爲什麼應該在可能的情況下更喜歡使用文字?另外,我下載了XRegExp和unicode插件,但是我仍然沒有看到如何將其用於我想要的。我想在那裏會有一個Lm(修改過的字母)? – Shawn 2010-09-12 17:55:14