我们说我有这个"代码"我想要lex。
var text = 'hello'
这是我的正则表达式。
现在,当我将代码放入regexr.com并使用标识符regex时,它会将字符串作为标识符进行匹配,我如何阻止它将字符串作为标识符进行匹配?
答案 0 :(得分:1)
什么标识字符串?引号。在你的情况下:单引号。
因此,我们希望将引号之间的内容匹配为字符串。为此,我们可以使用以下惰性正则表达式:
'.*?'
要同时允许这两个引号,您可以使用:'.*?'|".*?"
或使用反向引用(['"]).*?\1
。
如果允许转义字符串,它会变得更加复杂。我建议使用递归正则表达式来执行此操作:
((['"])(?>[^'"\\]++|\\.|(?1))*+\2)
a = "abc dsfsd", b= ' abc dsfsd'
c ="abc\" dsfsd"
d= "abc\\"
匹配任何标识符,但可以使用您可以使用的字符串:
[a-z]+(?=([^']*['][^']*['])*[^']*$)
(或者这里是与两种类型的引号相匹配的版本:[a-z]+(?=([^'"]*(["'])[^"']*\2)*[^"']*$)
)
同样,如果您想要考虑转义的报价,它会更复杂:
[a-z]+(?=([^"'\\]*(\\.|(["'])([^"'\\]*\\.)*[^"'\\]*\3))*[^"']*$)
我希望,这有帮助。