javascript - 匹配 JSON 字符串的正则表达式

标签 javascript json regex unicode

我正在从头开始构建一个 JSON 验证器,但我对字符串部分非常困惑。我希望构建一个正则表达式来匹配 JSON.org 上的以下序列:

JSON.org String Sequence

到目前为止我的正则表达式是:

/^\"((?=\\)\\(\"|\/|\\|b|f|n|r|t|u[0-9a-f]{4}))*\"$/

它确实匹配条件,反斜杠后跟一个字符和一个空字符串。但我不确定如何使用 UNICODE 部分。

是否有匹配任何 UNICODE 字符专家 "或\或控制字符的正则表达式?它会匹配换行符或水平制表符吗?

最后一个问题是因为regex匹配的是字符串“\t”,而不是“”(四个空格,不过思路是做tab)。否则我需要用它来扩展正则表达式,这不是问题,但我猜水平制表符是一个 UNICODE 字符。

感谢 Jaeger Kor,我现在有了以下正则表达式:

/^\"((?=\\)\\(\"|\/|\\|b|f|n|r|t|u[0-9a-f]{4})|[^\\"]*)*\"$/

它看起来是正确的,但是有没有什么方法可以检查控制字符,或者当它们出现在 regular-expressions.info 的不可打印字符上时不需要这样做吗?要验证的输入始终是来自文本区域的文本。

更新:正则表达式如下,以备不时之需:

/^("(((?=\\)\\(["\\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\0-\x1F\x7F]+)*")$/

最佳答案

为您的确切问题创建一个字符类

# Matches any character that isn't a \ or "
/[^\\"]/

然后您可以在末尾添加 * 以获得 0 或无限数量的,或者 1 或无限数量的 +

/[^\\"]*/

/[^\\"]+/

下面还有这个,位于https://regex101.com/。搜索json时在library标签下

/(?(DEFINE)
# Note that everything is atomic, JSON does not need backtracking if it's valid
# and this prevents catastrophic backtracking
(?<json>(?>\s*(?&object)\s*|\s*(?&array)\s*))
(?<object>(?>\{\s*(?>(?&pair)(?>\s*,\s*(?&pair))*)?\s*\}))
(?<pair>(?>(?&STRING)\s*:\s*(?&value)))
(?<array>(?>\[\s*(?>(?&value)(?>\s*,\s*(?&value))*)?\s*\]))
(?<value>(?>true|false|null|(?&STRING)|(?&NUMBER)|(?&object)|(?&array)))
(?<STRING>(?>"(?>\\(?>["\\\/bfnrt]|u[a-fA-F0-9]{4})|[^"\\\0-\x1F\x7F]+)*"))
(?<NUMBER>(?>-?(?>0|[1-9][0-9]*)(?>\.[0-9]+)?(?>[eE][+-]?[0-9]+)?))
)
\A(?&json)\z/x

这应该匹配任何有效的json,你也可以在上面的网站上测试

编辑:

Link to the regex

关于javascript - 匹配 JSON 字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32155133/

相关文章:

javascript - 如何查询对象数组数据

java - JSON 反序列化属性,包括 $

python - 用于在 python 中检索文本范围的正则表达式

java - 显示不匹配的字符串,正则表达式否定

javascript - 使用 JavaScript、HTML5 或任何跨平台语言(支持 Android)向 USB HID 写入数据

javascript - 一次性解析 promise 单例(Angular 服务)

javascript - 用智能引号替换愚蠢的引号并在 contenteditable div 中保持插入符位置

没有参数的 java.lang.RuntimeException : Failed to invoke public com. example.syncapp.MessageBase()

c# - 使用正则表达式提取值 - C#

javascript - 在另一个 Web 组件中定义一个 Web 组件,而不污染全局命名空间