2013-06-20 45 views
0

嗨,我有這個正則表達式。使用特殊字符的正則表達式

/^[\w]|[åäöæøÅÄÖÆØ]$/ 

「tå」沒問題,但「åå」不是。這是爲什麼?我怎樣才能讓它接受從åäöæÅÅÄÄÆÆÆØ開始的話?

+0

刪除'$'。 '[]'表示一個字符類。 – devnull

+0

*「」tå「沒問題,但是」åå「不是。」*他們都符合表達。''tå''匹配,因爲它匹配'^ [\ w]'選項。 ''åå''匹配,因爲它匹配'[åäææÅÅÄÄÄÆÆÆØ] $'替代品。 –

回答

4

注意,\w(和\W\b\B)是英語爲中心\w只是意味着[A-Za-z0-9_],其中A-Z只表示26個英文字母。其他字母不被JavaScript內置的字符類視爲「單詞」的一部分。

你需要建立一個字符類,包括所有你想作爲單詞字符對待的字母(然後使用那個無論是「非字字符」的否定版本)。

但這不是唯一的問題。正則表達式說:

匹配一個英文單詞字符的字符串的開頭,比賽在字符串的結束字符的這個名單中的一個。

|操作是相當貪婪,在這種情況下,把^[\w][åäöæøÅÄÖÆØ]$作爲替代品。我沒有得到你想要的印象。

「tå」沒問題,但「åå」不是。

我想這取決於你的意思是「好」。兩個匹配表達式:

console.log("tå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["t", index: 0, input: "tå"] 
console.log("åå".match(/^[\w]|[åäöæøÅÄÖÆØ]$/)); // ["å", index: 1, input: "åå"] 

"tå"匹配,因爲它的^[\w]備選匹配。 "åå"匹配,因爲它匹配[åäöæøÅÄÖÆØ]$替代方案。

我該如何讓它接受從åäöæ?ÅÄÆÆØØ開始的單詞?

如果目標是隻接受包含一個精確的字,其中「字」包括數字和下劃線組成的字符串(因爲\w一樣),則:

/^[A-Za-z0-9_åäöæøÅÄÖÆØ]+$/ 
+0

感謝最後沒有$? – pethel

+0

@ user874774:目前尚不清楚你在找什麼。如果你的目標是看看字符串是否包含*只有一個單詞*,那麼是的,把'$'放在末尾。 –

+0

是的,謝謝它的暱稱。 – pethel

0

爲什麼你認爲失敗?我不會把\ w放在方括號中,但是各種系統似乎都允許這樣做,並且以下兩個文本都與正在測試的文本匹配。

的Javascript

var test = 'åå'; 
if (test.match(/^[\w]|[åäöæøÅÄÖÆØ]$/)) { alert("Match"); } 

PHP

echo(preg_match("/^[\w]|[åäöæøÅÄÖÆØ]$/","åå")."</br>"); 

什麼是你想在這裏實現?