【问题标题】:understanding regular expression for detecting string了解用于检测字符串的正则表达式
【发布时间】:2011-11-25 17:13:25
【问题描述】:

我遇到了这个在 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\\]

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

【问题讨论】:

  • 嗨 Rohit,欢迎来到 StackOverflow!我认为您需要编辑您的问题并完全按照原来的方式重新粘贴您的正则表达式,然后使用{}(代码)按钮将其格式化为代码。如果您尝试通过自己插入反斜杠来猜测降价解析器,那么我们很难为您提供帮助。您的正则表达式中的所有这些引号也看起来有问题。不幸的是,这个问题在目前的状态下几乎无法回答。您可能还想阅读本页右上角的常见问题解答。这可能有助于您入门。
  • @TimPietzcker 感谢您的建议,我已经编辑了原始问题。我单独理解它们,但结合起来,它们让我感到困惑。
  • 所有这些引号字符真的存在于原始正则表达式中吗?我非常怀疑。
  • @TimPietzcker 我在词法分析器的 lex 文件中看到了这一点。用于 javascript 解析器 jison
  • 这可以解释额外的引号。这也意味着这不是一个真正的正则表达式,但对于我们的目的来说已经足够接近了。

标签: javascript regex unicode


【解决方案1】:
"\\x"[a-fA-F0-9]{2}

这是一个文字 \x,后跟来自十六进制数字组的两个字符。

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

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

这匹配以下之一:

  1. 反斜杠后跟一个字符,xu 除外。 \xNN\uNNNN 的有效案例在前面的 |-separated 子句中提取,所以这样做是为了避免匹配像 \uqX 这样的无效语法。

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

值得注意的是,选择“其他任何内容”的最后一个子句并不排除 \ 本身,因此即使在 JSON 和JavaScript。

【讨论】:

  • {esc} 看起来像是 OP 所做的,因为反斜杠没有出现,因为他没有使用代码格式。我把反斜杠放回原来的位置。
猜你喜欢
  • 2022-01-25
  • 2011-12-27
  • 2012-08-16
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多