Javascript Regex find last body标记
我知道解析器最适合这种情况,但在我目前的情况下,它必须是纯javascript 我有一个正则表达式来查找html文档的结束体标记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
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);