Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式来匹配JSON字符串_Javascript_Json_Regex_Unicode - Fatal编程技术网

Javascript 正则表达式来匹配JSON字符串

Javascript 正则表达式来匹配JSON字符串,javascript,json,regex,unicode,Javascript,Json,Regex,Unicode,我从头开始构建JSON验证器,但我完全被字符串部分卡住了。我的希望是构建一个正则表达式,它将匹配JSON.org上的以下序列: 到目前为止,我的正则表达式是: /^\"((?=\\)\\(\"|\/|\\|b|f|n|r|t|u[0-9a-f]{4}))*\"$/ 它确实使用反斜杠(后跟一个字符和一个空字符串)匹配条件。但我不知道如何使用UNICODE部分 是否有一个正则表达式来匹配任何UNICODE字符“专家”或\或控制字符?它是否匹配换行符或水平制表符 最后一个问题是因为正则表达式匹配字

我从头开始构建JSON验证器,但我完全被字符串部分卡住了。我的希望是构建一个正则表达式,它将匹配JSON.org上的以下序列:

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

/^\"((?=\\)\\(\"|\/|\\|b|f|n|r|t|u[0-9a-f]{4}))*\"$/
它确实使用反斜杠(后跟一个字符和一个空字符串)匹配条件。但我不知道如何使用UNICODE部分

是否有一个正则表达式来匹配任何UNICODE字符“专家”或\或控制字符?它是否匹配换行符或水平制表符

最后一个问题是因为正则表达式匹配字符串“\t”,但不匹配“”(四个空格,但其目的是作为一个制表符)。否则,我需要用它扩展正则表达式,这不是问题,但我猜水平制表符是一个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个或无限个+

/[^\\"]*/

下面还有这个,在搜索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有效,则不需要回溯
#这可以防止灾难性的回溯
(?(?>\s*(?&object)\s*|\s*(?&array)\s*))
(?(?>\{\s*(?>(?&pair)(?>\s*,\s*(?&pair))*)?\s*})
(?(?>(?&STRING)\s*:\s*(?&value)))

(?

感谢您的快速响应。我将其添加到我的第一个正则表达式中,它似乎工作正常。我不知道有关控制字符的任何信息,但也许我不需要担心,因为输入来自可能不被接受的文本区域。您提供的上一个正则表达式是完整的正则表达式,但我想知道是什么错误是。但是,我会再次检查它是否更有用!我一直在玩你最新的正则表达式,在拆分它们时,它们工作得很好!谢谢!Thx!搜索url是:如果你能发布一个使用这个正则表达式的代码段,那将很有帮助,当我将它粘贴到代码中时,我遇到了很多语法错误
/(?(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