Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 find last body标记_Javascript_Regex - Fatal编程技术网

Javascript Regex find last body标记

Javascript Regex find last body标记,javascript,regex,Javascript,Regex,我知道解析器最适合这种情况,但在我目前的情况下,它必须是纯javascript 我有一个正则表达式来查找html文档的结束体标记 var closing_body_tag = /(<\/body>)/i; var closing_body_tag=/()/i; 但是,当源设置了多个body标记时,此操作将失败。所以我在考虑这样的事情 var last_closing_body_tag = /(<\/body>)$/gmi; var last\u closing\u

我知道解析器最适合这种情况,但在我目前的情况下,它必须是纯javascript

我有一个正则表达式来查找html文档的结束体标记

var closing_body_tag = /(<\/body>)/i;
var closing_body_tag=/()/i;
但是,当源设置了多个body标记时,此操作将失败。所以我在考虑这样的事情

var last_closing_body_tag = /(<\/body>)$/gmi;
var last\u closing\u body\u tag=/()$/gmi;
这适用于找到多个标记的情况,但由于某些原因,它在只有一组标记的情况下失败

我是否犯了一个错误,导致单标签案例的结果不一

是的,我知道不止一个body标签不正确,但是,我们必须处理所有错误源。

使用

/(.|[\r\n])*(<\/body>)/mi
/(.|[\r\n])*()/mi
作为regexp。捕获组为2美元


这利用了与多行选项相关的贪婪匹配。请注意,“any char”符号与换行符/回车符不匹配,因此需要显式引用

匹配最后一个body标记的正则表达式相当简单:

/[\s\S]*(</body>)/i
都会匹配的


我使用了
[\s\s]
而不是
,因为
匹配除换行符之外的所有内容,这可能不是您想要的
\s
匹配所有空格--空格、制表符、各种换行符--并且
\s
相当于
[^\s]
,因此它匹配所有非空格的内容。总之,这些匹配每一个可能的字符。我想类似的事情也可以用
\w\w
\d\d
等等,但是
\s\s
是我的首选。

您可以使用这个正则表达式:

  /<\/body>(?![\s\S]*<\/body>[\s\S]*$)/i
/(?![\s\s]*[\s\s]*$)/i
(?![\s\s]*[\s\s]*$)
是一种前瞻性方法,可确保字符串结尾之前不再有结束正文标记

这是一本书

用于添加标记的示例代码:

var re = /<\/body>(?![\s\S]*<\/body>[\s\S]*$)/i; 
var str = '<html>\n<body>\n</body>\n</html>\n<html>\n<body>\n</body>\n</html>';
var subst = '<tag/>'; 
var result = str.replace(re, subst);
var re=/(?![\s\s]*[\s\s]*$)/i;
var str='\n\n\n\n\n\n\n';
var subst='';
var结果=str.replace(re,subst);
RegExp 正如我在评论中所建议的,使用:

/^[\S\s]+(<\/body>)/i
您说过您使用的JavaScript可以用作:

yourString.match(/^[\S\s]+(<\/body>)/i)[1];
现在,
elem
可以通过多种方式添加:

1: 2:
为什么你会有不止一个身体标签?只是好奇而已。为什么需要查找结束正文标记?你打算用它做什么?解析HTML不需要jQuery。@Adam你不需要Regexp。改为使用DOM操作方法
document.body.appendChild
在结束标记之前插入一个元素。正则表达式没有?也许它只是我的解析器,但是我得到一个错误,说lookaheads必须是零宽度的。当试图在Javascript中使用它时,我得到了一个错误。无效的正则表达式:/(?i)(?![\s\s]*[\s]*$)/:无效组请检查我的更新。内联选项是一个问题,我想这对我所需要的是有效的,但是,其他的似乎是可行的解决方案。作为记录,如果你不想有两个捕获组,你可以在第一个
)之后插入
,使其成为非捕获组。
</body>
</BODY>
</BoDY>
</body><!--This one's selected-->
yourString.match(/^[\S\s]+(<\/body>)/i)[1];
var elem = document.createElement('div');
elem.setAttribute('id', 'mydiv');
elem.innerHTML = 'Foo';
window.document.body.appenedChild(elem);
var body_elems = document.getElementsByTagName('body');
body_elems[body_elems.length - 1].appendChild(elem);