Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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 基于REGEXP的string.prototype.split插入故障_Javascript - Fatal编程技术网

Javascript 基于REGEXP的string.prototype.split插入故障

Javascript 基于REGEXP的string.prototype.split插入故障,javascript,Javascript,我正在开发一个可以读取HTML的解析器,但是拆分HTML的代码会导致在生成的数组的每个其他条目中插入“l” regexp是这样的: textarea.value.split(/(?=<(.|\n)+>)/) textarea.value.split(/(?=)/) 它应该做的是拆分入口/出口/单个HTML/XML标记,同时忽略选项卡和行终止符(它只是将它们附加到拆分的标记上) 能告诉我发生了什么事吗? 您可以在此处查看正在运行的代码并进行编辑: 只需在控制台中查找它产生的结果 编

我正在开发一个可以读取HTML的解析器,但是拆分HTML的代码会导致在生成的数组的每个其他条目中插入“l”

regexp是这样的:

textarea.value.split(/(?=<(.|\n)+>)/)
textarea.value.split(/(?=)/)
它应该做的是拆分入口/出口/单个HTML/XML标记,同时忽略选项卡和行终止符(它只是将它们附加到拆分的标记上)

能告诉我发生了什么事吗? 您可以在此处查看正在运行的代码并进行编辑: 只需在控制台中查找它产生的结果

编辑:MaxArt是对的最后一个
中的l导致异常为“l”s

尝试以下方法:

textarea.value.split(/(?=<[^>]+>)/);
textarea.value.split(/(?=]+>)/);
但是。。。阿尔尼塔克说的。一个基于regexps的成熟的HTML解析器,尤其是在Javascript中对regexps的功能支持很差的情况下,将是一个可怕的(缓慢的)混乱

我还得找出你发现的奇怪行为的原因。请注意,“l”(ell)是
的最后一个字母,即HTML代码的第一个标记。把它换成别的,你会注意到字母的变化。

试试这个:

textarea.value.split(/(?=<[^>]+>)/);
textarea.value.split(/(?=]+>)/);
但是。。。阿尔尼塔克说的。一个基于regexps的成熟的HTML解析器,尤其是在Javascript中对regexps的功能支持很差的情况下,将是一个可怕的(缓慢的)混乱


我还得找出你发现的奇怪行为的原因。请注意,“l”(ell)是
的最后一个字母,即HTML代码的第一个标记。把它换成别的,你会注意到字母的变化。

-“nuff”said@Alnitak谢谢你的链接,我很喜欢。-'努夫said@Alnitak谢谢你的链接,我很喜欢。很好的发现,知道是什么原因吗?@TERMtm是的,这是因为序列
(.|\n)
是一个捕获组。将其更改为
(?:.|\n)
,应该可以。我仍然需要理解为什么在
split
中使用的regexp中的捕获组会导致此问题(请尝试
“foobarbaz”.split(/(b)/)
),但可能这是一种我不知道的标准行为,并且使用零长度分隔符会导致所描述的效果。专业提示:永远不要在
split
中使用捕获组。感谢您的帮助,请阅读REGEXP并了解您的非贪婪示例的工作原理。真希望我能再加1,你帮了我大忙。发现得好,知道是什么原因吗?@TERMtm是的,这是因为序列
(.|\n)
是一个捕获组。将其更改为
(?:.|\n)
,应该可以。我仍然需要理解为什么在
split
中使用的regexp中的捕获组会导致此问题(请尝试
“foobarbaz”.split(/(b)/)
),但可能这是一种我不知道的标准行为,并且使用零长度分隔符会导致所描述的效果。专业提示:永远不要在
split
中使用捕获组。感谢您的帮助,请阅读REGEXP并了解您的非贪婪示例的工作原理。但愿我能多加1,你帮了我大忙。