我對正則表達式不太熟悉,所以我需要一些幫助。我正在使用一個jQuery
dynacloud插件,當正則表達式匹配發生時,它在我的代碼中的某個特定點處斷開。我需要一個人來幫我弄清楚這個正則表達式匹配什麼RegEx的含義
/^[a-z\xE4\xF6\xFC]*[A-Z\xC4\xD6\xDC]([A-Z\xC4\xD6\xDC\xDF]+|[a-z\xE4\xF6\xFC\xDF]{3,}
請任何幫助!
我對正則表達式不太熟悉,所以我需要一些幫助。我正在使用一個jQuery
dynacloud插件,當正則表達式匹配發生時,它在我的代碼中的某個特定點處斷開。我需要一個人來幫我弄清楚這個正則表達式匹配什麼RegEx的含義
/^[a-z\xE4\xF6\xFC]*[A-Z\xC4\xD6\xDC]([A-Z\xC4\xD6\xDC\xDF]+|[a-z\xE4\xF6\xFC\xDF]{3,}
請任何幫助!
的\x**
部分轉換成一個特殊的charachter,如果更換這些你基本上得到:
/^[a-zäöü]*[A-ZÄÖÜ]([A-ZÄÖÜß]+|[a-zäöüß]{3,})/
我會分開給你:
^
字符串的開頭
[a-zäöü]
字符集:從任何字符a到z或AOU *
零次或多次
[A-ZÄÖÜ]
字符集:從A任何字符到Z或AOU只是一次
(
組的開始
[A-ZÄÖÜß]
另一個字符集,你應該現在得到它:) +
一次或多次
|
或
[a-zäöüß]
字符集,{3,}
3次或更多次
)
端基
也,你錯過了)/
在結束時,/
在開始和結束意味着什麼在之間是正則表達式。
感謝您的好解釋。所以這意味着這個正則表達式不允許UTF-8字符,對嗎? – karan 2012-08-14 12:19:21
基本上它只允許指定字符集中的字符集 – 2012-08-14 13:01:02
^
線
[...]
一類可能的begining chars
a-z
範圍(abcde ... yz)
\xE4
char(「ascii」代碼)的十六進制值。
{n,m}
n和m發生之間。
*
相當於{0,}相當於
+
{1,}
假設這是你的正則表達式:
/^[a-z\xE4\xF6\xFC]*[A-Z\xC4\xD6\xDC]([A-Z\xC4\xD6\xDC\xDF]+|[a-z\xE4\xF6\xFC\xDF]{3,})/
以下將是正則表達式的解釋:
"^" + // Assert position at the beginning of a line (at beginning of the string or after a line break character)
"[a-z\xE4\xF6\xFC]" + // Match a single character present in the list below
// A character in the range between 「a」 and 「z」
// ASCII character 0xE4 (228 decimal)
// ASCII character 0xF6 (246 decimal)
// ASCII character 0xFC (252 decimal)
"*" + // Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
"[A-Z\xC4\xD6\xDC]" + // Match a single character present in the list below
// A character in the range between 「A」 and 「Z」
// ASCII character 0xC4 (196 decimal)
// ASCII character 0xD6 (214 decimal)
// ASCII character 0xDC (220 decimal)
"(" + // Match the regular expression below and capture its match into backreference number 1
// Match either the regular expression below (attempting the next alternative only if this one fails)
"[A-Z\xC4\xD6\xDC\xDF]" + // Match a single character present in the list below
// A character in the range between 「A」 and 「Z」
// ASCII character 0xC4 (196 decimal)
// ASCII character 0xD6 (214 decimal)
// ASCII character 0xDC (220 decimal)
// ASCII character 0xDF (223 decimal)
"+" + // Between one and unlimited times, as many times as possible, giving back as needed (greedy)
"|" + // Or match regular expression number 2 below (the entire group fails if this one fails to match)
"[a-z\xE4\xF6\xFC\xDF]" + // Match a single character present in the list below
// A character in the range between 「a」 and 「z」
// ASCII character 0xE4 (228 decimal)
// ASCII character 0xF6 (246 decimal)
// ASCII character 0xFC (252 decimal)
// ASCII character 0xDF (223 decimal)
"{3,}" + // Between 3 and unlimited times, as many times as possible, giving back as needed (greedy)
")"
我會認爲這是一個從正則表達式缺少)/
只是一個cut-在你的部分粘貼錯誤;他們出現在DynaCloud source code。什麼是不是目前是一個結束錨點($
),我覺得很驚訝。以下是相關的代碼:
var elems = jQuery(this).text()
.replace(/[^A-Z\xC4\xD6\xDCa-z\xE4\xF6\xFC\xDF0-9_]/g, ' ')
.replace(jQuery.dynaCloud.stopwords, ' ')
.split(' ');
var word =
/^[a-z\xE4\xF6\xFC]*[A-Z\xC4\xD6\xDC]([A-Z\xC4\xD6\xDC\xDF]+|[a-z\xE4\xF6\xFC\xDF]{3,})/;
第一條語句過濾掉不需要的字符,但是隻保留數字和下劃線。第二條語句試圖匹配一個由ASCII字母組成的單詞以及一些在(例如)德語中使用的非ASCII字母。但是,一旦匹配的字母用完,可以繼續匹配任意個字符,而不僅僅是第一個正則表達式中列出的字符。而且,單詞中的任何數字或下劃線都會導致單詞被分成兩個或更多單詞。
我會嘗試在端錨的正則表達式,並增加了對數字和下劃線的支持,這樣的:
/^[a-z\xE4\xF6\xFC]*[A-Z\xC4\xD6\xDC]([A-Z\xC4\xD6\xDC\xDF0-9_]+|[a-z\xE4\xF6\xFC\xDF0-9_]{3,})$/g
這正則表達式是隻是爲了演示;它並不打算成爲一個解決方案。首先,我猜測了數字和下劃線的位置。另一方面,它現在可以匹配以數字和下劃線結尾的單詞,並且您可能不希望這樣。
非常感謝你@Alan。由於您似乎對RegEx非常熟悉,如果您不介意,我想向您提出一個小問題。我可以創建一個類似的正則表達式,它不僅可以匹配標準[a-z]字符集中的字符,而且可能包含所有中文字符,俄語......基本上是unicode字符集。 – karan 2012-08-14 13:39:57
您總是可以使用像'\ u00E4'或'\ u2018'這樣的Unicode轉義符,但這非常符合JavaScript的Unicode支持。但不用擔心,Steve Levithan的[XReEgxp](http://xregexp.com/)庫在填補這一空白方面做得非常出色。 – 2012-08-14 18:39:15
表達不完整,你錯過了最後... – 2012-08-14 09:31:58
@FelixKling:我敢肯定,這只是一個剪切粘貼錯誤。 paren和斜槓在dynacloud源代碼中存在.. – 2012-08-14 11:01:25
@Alan:當然,但是如果我們要解釋表達的意思,那麼在這裏有整個表達式會很好;) – 2012-08-14 11:03:48