正则表达式匹配JSON字符串

Sie*_*tse 12 javascript regex unicode json

我正在从头开始构建一个JSON验证器,但我完全坚持使用字符串部分.我希望构建一个与JSON.org上的以下序列相匹配的正则表达式:

JSON.org字符串序列

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

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

它的标准与字符和空字符串后面的反斜杠相匹配.但我不确定如何使用UNICODE部分.

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

最后一个问题是因为正则表达式匹配字符串"\ t",而不是""(四个空格,但想法是一个标签).否则我将需要用它来扩展正则表达式,这不是问题,但我的猜测是水平制表符是UNICODE字符.

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

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

它似乎是正确的,但是有没有办法检查控制字符,或者这是不必要的,因为它们出现在regular-expressions.info上的不可打印的字符上?要验证的输入始终是textarea中的文本.

更新:如果有人需要,正则表达式如下:

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

Jae*_*Kor 12

对于您的确切问题,请创建一个字符类

# Matches any character that isn't a \ or "
/[^\\"]/
Run Code Online (Sandbox Code Playgroud)

然后你可以在最后添加*以获得0或无限数量的它们,或者1或无限数字+

/[^\\"]*/
Run Code Online (Sandbox Code Playgroud)

要么

/[^\\"]+/
Run Code Online (Sandbox Code Playgroud)

还有以下内容,在搜索json时,在库选项卡下的https://regex101.com/上找到

/(?(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
Run Code Online (Sandbox Code Playgroud)

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

编辑:

链接到正则表达式

  • 谢谢 !搜索网址为:https://regex101.com/library?orderBy = MOST_POINTS&search = json (2认同)