我正在使用javascript编写正则表达式,该表达式旨在以javascript中允许的所有排列方式捕获javascript代码中的字符串文字。这是我想出的:
([\"\'])(.*?(?:(\\"|\\').*?\3.*?)*?)\1
描述:正则表达式在捕获组1中捕获起始引号(“或'),并且在表达式的末尾(\ 1)重复引号以将完整的字符串文字括起来。字符串文字可以包含用转义引号引起来的子字符串(例如:“ ab \” cd \“ ef”),我允许在字符串文字内出现匹配的一对转义的单引号和双引号。捕获组3用于匹配起始和结束转义引号。字符串文字的内容将在捕获组2中,并且除去外部引号(用于封装字符串的标记将在捕获组1中)。请注意,我使用(?:..)使其中一组无法捕获。
我已经在下面的字符串上测试了表达式,并且似乎可以正常工作:
"abcdefg" // Simple string literal using ".."
'abcdefg' // Simple string literal using '..'
"a\"b\"c\"d\"e\'f\'g" // Escaped matched singles and doubles
"a\"b\"\"c\"\'d\'\'e\'fg" // Another variant
"\"ab\"\'cd\'ef\"\"\'\'g" // Zero length escaped sequences
"a'b'cd'ef'g" // Enclosed in doubles, singles in middle
'"ab"cd"e""f"g' // Enclose in singles, doubles in middle
我的问题是,我需要考虑是否有其他允许在javascript中进行的排列。请注意,包含在双引号字符串文字(“ ab'cde'fg”)中的单引号序列和包含在单引号字符串文字('ab“ cde” fg')中的双引号序列不需要分别处理(I ),因为该模式与包围的外部引号匹配。对于所有潜在的跨浏览器问题,如果存在一些浏览器根本不支持正则表达式或不支持我在此处使用的功能(例如捕获组或不捕获语法),我也将不胜感激。
编辑:我正在尝试捕获嵌入在字符串文字中的转义字符串文字。这使该问题陈述与regex-for-quoted-string-with-escaping-quotes
中的陈述不同我正在使用javascript编写正则表达式,该表达式旨在以javascript中允许的所有排列方式捕获javascript代码中的字符串文字。这是我想出的:...
您接受三个字母的序列"\"
作为字符串。.*
太包容,您还需要避免与反斜杠匹配。