Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:regex,用于解析包含转义引号的引号字符串-返回未终止的字符类_Javascript_Regex - Fatal编程技术网

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
对象构造函数的字符串创建的正则表达式。