我遇到了这个正则表达式,它检测JavaScript中Unicode字符的字符串文字。
'"'("\\x"[a-fA-F0-9]{2}|"\\u"[a-fA-F0-9]{4}|"\\"[^xu]|[^"\n\\])*'"'
但我无法理解
的作用和需要 "\\x"[a-fA-F0-9]{2}
"\\"[^xu]|[^"\n\\]
我对1)的猜测是它正在检测控制字符。
答案 0 :(得分:1)
"\\x"[a-fA-F0-9]{2}
这是一个文字\x
,后跟十六位数组中的两个字符。
这匹配代码点0-255,\x00
- \xFF
的短格式字符转义符。这些在JavaScript字符串文字中有效,但它们不在JSON中,您必须使用\u0000
- \u00FF
。
"\\"[^xu]|[^"{esc}\n]
这匹配以下之一:
反斜杠后跟一个字符,x
或u
除外。 \xNN
和\uNNNN
的有效案例在之前的|
- 分隔条款中被选中,因此这样做可以避免匹配\uqX
之类的无效语法。
除了"
或换行符之外的任何其他内容。它可能也应该排除其他转义字符,我猜这是{esc}
的含义。这不是正常的正则表达式语法的一部分,但它可能是一些扩展语法或模板在正则表达式的顶部。否则,[^"{esc}\n]
只表示除"
,{
,e
,s
,c
,}
或换行符之外的任何字符,这是错误的。
值得注意的是,最后一个选择“其他任何内容”的子句并不排除\
本身,因此您仍然可以在字符串中使用\uqX
并获得匹配,即使它无效在JSON和JavaScript中。