理解正则表达式以检测字符串

时间:2011-11-25 17:13:26

标签: javascript regex unicode

我遇到了这个正则表达式,它检测JavaScript中Unicode字符的字符串文字。

'"'("\\x"[a-fA-F0-9]{2}|"\\u"[a-fA-F0-9]{4}|"\\"[^xu]|[^"\n\\])*'"'

但我无法理解

的作用和需要
  1. "\\x"[a-fA-F0-9]{2}

  2. "\\"[^xu]|[^"\n\\]

  3. 我对1)的猜测是它正在检测控制字符。

1 个答案:

答案 0 :(得分:1)

"\\x"[a-fA-F0-9]{2}

这是一个文字\x,后跟十六位数组中的两个字符。

这匹配代码点0-255,\x00 - \xFF的短格式字符转义符。这些在JavaScript字符串文字中有效,但它们不在JSON中,您必须使用\u0000 - \u00FF

"\\"[^xu]|[^"{esc}\n]

这匹配以下之一:

  1. 反斜杠后跟一个字符,xu除外。 \xNN\uNNNN的有效案例在之前的| - 分隔条款中被选中,因此这样做可以避免匹配\uqX之类的无效语法。

  2. 除了"或换行符之外的任何其他内容。它可能也应该排除其他转义字符,我猜这是{esc}的含义。这不是正常的正则表达式语法的一部分,但它可能是一些扩展语法或模板在正则表达式的顶部。否则,[^"{esc}\n]只表示除"{esc}或换行符之外的任何字符,这是错误的。

  3. 值得注意的是,最后一个选择“其他任何内容”的子句并不排除\本身,因此您仍然可以在字符串中使用\uqX并获得匹配,即使它无效在JSON和JavaScript中。