var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre.*?<\/pre>/gm );
alert(arr);     // null

我希望前置块被选中,即使它跨越了换行符.我以为是"m"旗干的.没有.

在发布前找到答案here.既然我以为我懂JavaScript(读了三本书,工作了几个小时),而且现在还没有一个现成的解决方案,我还是敢发帖.throw stones here

因此,解决方案是:

var ss= "<pre>aaaa\nbbb\nccc</pre>ddd";
var arr= ss.match( /<pre[\s\S]*?<\/pre>/gm );
alert(arr);     // <pre>...</pre> :)

有没有人有一种不那么神秘的方式?

编辑:this是一个副本,但因为它比我的更难找到,我没有删除.

它建议将[^]作为"多行点".我仍然不明白的是为什么[.\n]不管用.我猜这是JavaScript最令人难过的部分之一.

推荐答案

[.\n]不起作用,因为.[]中没有特殊意义,它只是指字面意义上的..(.|\n)将是一种指定"任何字符,包括换行符"的方式.如果你想匹配所有的换行符,你还需要添加\r来包含Windows和classic Mac OS风格的换行符:(.|[\r\n]).

事实证明,这有点麻烦,而且速度很慢(参见KrisWebDev's answer for details),因此更好的方法是将所有空白字符和所有非空白字符与[\s\S]匹配,[\s\S]将匹配所有字符,并且更快、更简单.

通常,您不应该try 使用regexp来匹配实际的HTML标记.例如,有关原因的更多信息,请参见these questions.

相反,试着在DOM中搜索所需的标记(使用jQuery会更容易,但使用标准DOM总是可以搜索document.getElementsByTagName("pre")),然后如果需要匹配这些内容,可以使用regexp搜索这些结果的文本内容.

Javascript相关问答推荐

django无法解析余数:[0] from carray[0]'

我应该绑定不影响状态的函数吗?'

TypeScript索引签名模板限制

Next.js(react)使用moment或不使用日期和时间格式

如何在mongoose中链接两个模型?

如何在Obsidian dataview中创建进度条

如何从html元素创建树 struct ?

JS—删除对象数组中对象的子对象

提交链接到AJAX数据结果的表单

以Angular 实现ng-Circle-Progress时出错:模块没有导出的成员

如何在Bootstrap中减少网格系统中单个div的宽度

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

我不知道如何纠正这一点.

FindByIdAndUpdate在嵌套对象中创建_id

我的NavLink活动类在REACT-ROUTER-V6中出现问题

谷歌饼图3D切片

如何动态呈现适合未知屏幕大小的最大数量的表行?苗条的

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中

Oracle APEX-如何调用Java脚本函数