【问题标题】:Converting Ruby regex to JavaScript one将 Ruby 正则表达式转换为 JavaScript 一
【发布时间】:2014-07-30 01:19:10
【问题描述】:

我想将此 Ruby 正则表达式转换为 JavaScript 之一:

/\<br \/\>\<a href\=(.*?)\>([0-9]+\:[0-9]+)\<\/a\> \<a href\=\'.*?\' target\=\_blank\>(.*?)(?=\<\/a\>\<br\>\<p.*?\<\/p\>\<br \/\>\<a href\=.*?\>([0-9]+\:[0-9]+)\<\/a\> \<a href\=\'.*?\' target\=\_blank\>.*?\<\/a\>.*?\<br \/\>)/m

它在 Ruby 中完美运行,但在 Chrome JavaScript 控制台中却不行。然后我将使用它从网页源 HTML 代码 (document.body.innerHTML) 中提取一些信息,并使用此处描述的 scan 方法使用 JavaScript 函数:JavaScript equivalent of Ruby's String#scan

我认为前瞻 (?= ) 在 JavaScript 中可能存在问题,最重要的是它包含一个捕获组。可以转换吗?

【问题讨论】:

  • 强制不要这样做link

标签: javascript ruby regex innerhtml lookahead


【解决方案1】:

在 JavaScript 中,您可以执行以下操作:

var re = new RegExp("<br /><a href=(.*?)>([0-9]+:[0-9]+)</a> <a href='.*?' target=_blank>(.*?)(?=</a><br><p.*?</p><br /><a href=.*?>([0-9]+:[0-9]+)</a> <a href='.*?' target=_blank>.*?</a>.*?<br />)", "m");

但这可能不会起作用,因为 Ruby 中的 m 修饰符使 . 匹配所有字符,而在 JavaScript 中这意味着多行模式,其中 ^$ 在开头和结尾匹配每一行。

因此,如果您确实认为您需要正则表达式来执行此操作,并且您匹配的 HTML 数据有或可能有换行符,您将需要删除 m 标志并将.*? 替换为@987654328 等解决方法@ 也可以匹配这些字符,因为 JavaScript 没有像 Ruby m 修饰符那样工作的 dotall 模式修饰符。

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 1970-01-01
    • 2019-05-11
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多