2011-06-29 96 views
4

我無法讓此Javascript正則表達式正常工作。 我想要的是找到一個以@"開頭的字符,中間有任何字符,並以"結尾。我也需要它從一個單引號。Javascript正則表達式報價

對我來說,棘手的部分是它不能從@"開始,並以"結尾,因爲它正在查看的字符串可能看起來像[UIImage imageNamed:@"glass-round-red-green-button.png"]

到目前爲止,我擁有的是這個。

regex: new RegExp('\\@"?\\w+\\b"*', 'g')

回答

8

試試這個正則表達式:

/@(["'])[^]*?\1/g 

的解釋:

  • @(["'])比賽無論是@"@'
  • [^]*?匹配任意字符([^]包含在相對的所有字符.不包含換行符),但在非貪婪方式
  • \1相同的字符匹配與(["'])
匹配

使用literal RegExp syntax /…/更方便。請注意,這不會將\"等序列考慮在內。

+0

完美!你能給我多一個正則表達式嗎?我需要找到一個數字,但前提是該字符不是字母。 – cnotethegr8

+0

@ cnotethegr8:我會使用一個後視斷言。但是由於JavaScript不支持後置斷言,所以你需要這樣的東西:'/(^ | [^ a-zA-Z])\ d /'。您可以用'[\ W \ d_]'(非單詞,數字字符和'_')代替'[^ a-zA-Z]'。 – Gumbo

+0

謝謝。它幾乎完成。我使用這個'/(^ | [\ W \ d _])\ d +/g',但是當數字看起來像這樣(''19'它包括'('我怎麼能得到它? – cnotethegr8

0

正則表達式是: var regex = /@"[^"]*"/g;

0

Gumbo的正則表達式非常好,但它沒有檢測到轉義引號(例如\",\\\"等)。可以解決這方面的一個正則表達式如下:

/@(["'])[^]*?[^\\](?:\\\\)*\1|@""|@''/g 

的解釋(自甘博的解釋繼續):

  • [^\\]最近的字符preccedding結束報價,是不是一個反斜槓匹配(錨背 - 計數檢查)。
  • (?:\\\\)*僅當反斜槓的數量是2的倍數(包括零)時才匹配,以便不計算轉義的反斜槓。
  • |@""檢查是否有空的雙引號,因爲[^\\]要求字符串中至少有一個字符才能起作用。
  • |@''檢查是否有空單引號。