【问题标题】:Javascript regular expression issue - run-time error JS5017: Syntax error in regular expressionJavascript 正则表达式问题 - 运行时错误 JS5017:正则表达式中的语法错误
【发布时间】:2014-01-23 13:12:30
【问题描述】:

我收到一个 Javascript 缩小错误说:

(9,8617-8631): run-time error JS5017: Syntax error in regular expression: /\<br>(.*?)/ig
(9,8757-8776): run-time error JS5017: Syntax error in regular expression: /\<p>(.*?)\<\/p>/ig

这些发生的 javascript 是:

$htmlPattern =  [
                    /\<br>(.*?)/ig,
                    /\<br\/>(.*?)/ig
                ];

$htmlReplace = [
                    '<p>$1</p>',
                    '<p>$1</p>'
                ];

...和...

$htmlContent = $htmlContent.replace(/\<p>(.*?)\<\/p>/ig, '<div>$1</div>');

谁能看出正则表达式有什么问题?

谢谢,马克

【问题讨论】:

  • 秉持古老的格言"don't parse HTML with regex":如果要替换元素的标记名,可以考虑使用jQuery's replaceWith()。或者,如果一定是纯JS,请看this function
  • 不是问题,但您不需要两种模式。只需将 br 的 / 设为可选,也可以使用可选空格:/&lt;br[\s\/]*&gt;(.*?)/ig/&lt;br\b[^&gt;]*&gt;(.*?)/ig

标签: javascript regex


【解决方案1】:

如果你真的想要这些表达式中的第一个反斜杠,它们必须被转义:

$htmlPattern =  [
                    /\\<br>(.*?)/ig,
                    /\\<br\/>(.*?)/ig
                ];

除非这是为了逃避&lt;,否则这是不必要的。在这种情况下,只需删除反斜杠:

$htmlPattern =  [
                    /<br>(.*?)/ig,
                    /<br\/>(.*?)/ig
                ];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2012-02-24
    相关资源
    最近更新 更多