Javascript:regex,用于解析包含转义引号的引号字符串-返回未终止的字符类
搜索能够有效解析包含转义引号的字符串的正则表达式时,我得到了一个休闲正则表达式文本:Javascript:regex,用于解析包含转义引号的引号字符串-返回未终止的字符类,javascript,regex,Javascript,Regex,搜索能够有效解析包含转义引号的字符串的正则表达式时,我得到了一个休闲正则表达式文本: /"[^"\\]*(?:\\.[^"\\]*)*"/ 例如,如果用于拆分字符串(如: var str = 'This is a block of text containing a "string with a \" (escaped quote) in it"'; str.split(/("[^"\\]*(?:\\.[^"\\]*)*")/); 现在,当我尝试使用内置的regex对象动态构建regex时
/"[^"\\]*(?:\\.[^"\\]*)*"/
例如,如果用于拆分字符串(如:
var str = 'This is a block of text containing a "string with a \" (escaped quote) in it"';
str.split(/("[^"\\]*(?:\\.[^"\\]*)*")/);
现在,当我尝试使用内置的regex
对象动态构建regex时,麻烦来了:
/* splits by space characters and
strings containing escaped quote */
var re = new RegExp("(\\s|\"[^\"\\]*(?:\\.[^\"\\]*)*\")");
我知道这个用例需要转义元字符和引号,这是多么明显。尽管如此,我还是得到了一些附带的错误:
萨法里说
SyntaxError: Invalid regular expression: missing terminating ] for character class
火狐:
SyntaxError: unterminated character class
顺便说一句,Safari返回的错误消息为我提供了更多的线索,表明正则表达式引擎检测到缺少右括号,要求对其前面的反斜杠字符进行转义,如下所示:
v v
var re = new RegExp("(\\s|\"[^\"\\\\]*(?:\\.[^\"\\\\]*)*\")");
但通过这种方式,我意识到包含转义引号的字符串不再被正确解析
非常感谢您提供的任何帮助或建议。同时考虑到上述评论,我对该主题进行了更深入的研究,最后,由于@NullUserException指出的观察,我得到了解决方案。我意识到正则表达式对象:
var re = new RegExp("(\\s|\"[^\"\\\\]*(?:\\.[^\"\\\\]*)*\")");
没有工作,因为仅仅由于疏忽,我没有正确地转义检测前有反斜杠字符(转义字符)的部分。因此,在字符串中,序列\\.
必须是\\\.
:
var re = new RegExp("(\\s|\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")");
这里有一个简单的现场演示:您的正则表达式中有太多的反斜杠,例如,
\\s
将匹配一个反斜杠(\),后跟s
,例如,\s
-这是您想要的吗?请澄清要拆分的字符串以及所需的输出。如果使用字符串(即:\s
变为\\s
,\\been\\\\等),只需将反斜杠转义两次即可。顺便说一下,<代码> > [[\:\\\\\] ] *是“<代码> ReXEP < /Cord>对象……简要地说,我有一些C++源代码来自于<代码>内文HTML<代码>,我需要提取一个字符串:regex
对象构造函数的字符串创建的正则表达式。