我正在使用 JavaScript 中的正则表达式编写一个基本的词法分析器,我有两个正则表达式(一个用于单引号字符串,一个用于双引号字符串),我希望将它们组合成一个。这是我的两个正则表达式(出于测试目的,我添加了^
and字符):$
var singleQuotedString = /^'(?:[^'\\]|\\'|\\\\|\\\/|\\b|\\f|\\n|\\r|\\t|\\u[0-9A-F]{4})*'$/gi;
var doubleQuotedString = /^"(?:[^"\\]|\\"|\\\\|\\\/|\\b|\\f|\\n|\\r|\\t|\\u[0-9A-F]{4})*"$/gi;
现在我尝试将它们组合成一个正则表达式,如下所示:
var string = /^(["'])(?:[^\1\\]|\\\1|\\\\|\\\/|\\b|\\f|\\n|\\r|\\t|\\u[0-9A-F]{4})*\1$/gi;
但是,当我测试输入时"Hello"World!"
,它返回true
而不是false
:
alert(string.test('"Hello"World!"')); //should return false as a double quoted string must escape double quote characters
我认为问题[^\1\\]
在于除了匹配组\1
(单引号或双引号 - 字符串的分隔符)和\\
(反斜杠字符)之外的任何字符。
正则表达式正确过滤掉反斜杠并匹配分隔符,但它不会过滤掉字符串中的分隔符。任何帮助将不胜感激。请注意,我参考了 Crockford 的铁路图来编写正则表达式。