2011-06-29 63 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的倍数(包括零)时才匹配,以便不计算转义的反斜杠。
  • |@""检查是否有空的双引号,因为[^\\]要求字符串中至少有一个字符才能起作用。
  • |@''检查是否有空单引号。