我正在使用JavaScript Regexp实现词法分析器,其中一个令牌类型是双引号字符串,例如“abc”。复杂的情况是带有转义引号字符的字符串,如“a \”b“。
我假设以下2个正则表达式是等效的:
1)"(\\"|[^"])*"
2)"([^"]|\\")*"
但实际上只有#1有效。您可以在http://regex101.com/#javascript上针对“a \”b“尝试2个正则表达式。我不知道两者之间有什么区别,是否有更好的解决方案?
PS:事实证明#1和#2不同,请参阅以下简化示例:
regex = /(a|ab)*/
regex.exec("aab") -> matches "aa"
JavaScript Regexp不会尽可能地尝试匹配,它只会尝试找到可行的匹配。
虽然以下一个有效,但因为“aa”不匹配。
regex = /^(a|ab)*$/
regex.exec("aab") -> matches "aab"