259 javascript regex
我写了一个正则表达式来从html中获取字符串,但似乎多行标志不起作用.
这是我的模式,我想在h1标签中获取文本.
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi
m = html.search(pattern);
return m[1];
Run Code Online (Sandbox Code Playgroud)
我创建了一个字符串来测试它.当字符串包含"\n"时,结果始终为null.如果我删除所有"\n",它给了我正确的结果,无论是否带有/ m标志.
我的正则表达式有什么问题?
mol*_*olf 597
您正在寻找/.../s修饰符,也称为dotall修饰符.它强制点.也匹配换行符,默认情况下不会这样做.
坏消息是它在JavaScript中不存在 (从ES2018开始,见下文).好消息是你可以通过使用一个字符类(例如\s)和它的否定(\S)来解决它,就像这样:
[\s\S]
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,正则表达式将成为:
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
Run Code Online (Sandbox Code Playgroud)
从ES2018开始,JavaScript支持s(dotAll)标志,所以在现代环境中,你的正则表达式可能就像你编写它一样,但最后有一个s标志(而不是m; m改变方式^和$工作,而不是.):
/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is
Run Code Online (Sandbox Code Playgroud)
Gre*_*reg 20
你想要s(dotall)修饰符,它显然在Javascript中不存在 - 你可以用.@molf建议的[\ s\S]替换.的m(多)修饰符使得^和$匹配行,而不是整个字符串.
dotall修饰符实际上已于2018年6月成为JavaScript,即ECMAScript 2018.https
://github.com/tc39/proposal-regexp-dotall-flag
const re = /foo.bar/s; // Or, `const re = new RegExp('foo.bar', 's');`.
re.test('foo\nbar');
// ? true
re.dotAll
// ? true
re.flags
// ? 's'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89202 次 |
| 最近记录: |