Regex - PHP to Javascript

Regex - PHP to Javascript

本文关键字:Javascript to PHP Regex      更新时间:2023-09-26

我有以下正则表达式:

<div's*class="selectionDescription">(.*?)<'/div>

它与PHP完美配合。我知道javascript不支持''s标志。

我尝试使用''g标志,但是我的模式不匹配。

我希望在以下字符串中匹配div 中的所有内容:

<div class="selectionDescription">Text to match</div>

我在javascript中收到以下错误:

Uncaught SyntaxError: Invalid flags supplied to RegExp constructor 's'(…)

你的模式似乎有效。

s不是标志,所以如果你正在尝试类似new RegExp('<div's*class="selectionDescription">(.*?)<'/div>', 's')的东西,那么是的,你会发现一个错误。

您不需要添加任何标志,除了多次捕获此div 的g标志。(看看吧)

也许查看有关Javascript正则表达式的快速入门?

如果你跨越多行,你的意思是s提供的single line模式,你可以用['S's]或其他类似的"全包,全独"风格来模拟它:['d'D]['W'w]等。

这将允许它跨越多行并且仍然匹配:

<div's*class="selectionDescription">(['S's]*?)<'/div>

但是,您需要警惕使用惰性*?量词。看看步数为 220 的 https://regex101.com/r/xD2jV8/1。

如果<div></div>标签之间的内容非常大,这将变得非常昂贵,计算速度非常快。

虽然可读性略低,

<div's*class="selectionDescription">((?:[^<]+|<(?!'/div>))*)<'/div>

会做同样的事情,但只需 69 个步骤。

在这一点上,https://regex101.com/r/xD2jV8/3 稍微进一步优化了它,但HTML真的不是用HTML处理事情的最佳方式。 jQuery可以快速且"更安全"地执行此操作: $('div.selectionDescription').html()

当然,此时您可能无法访问它,但 HTML 通常不是用于解析 HTML 的最佳选择。