【问题标题】:RegExp range out of order with complex patternRegExp 范围乱序且模式复杂
【发布时间】:2014-03-06 09:59:05
【问题描述】:

这是我的模式:

var pattern = "/(?:https?:\/\/)?(?:www\.)?facebook\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]*)/";
var matches = $("#search input").val().match(new RegExp(pattern));

当我使用它时,它给了我一个错误:

Uncaught SyntaxError: Invalid regular expression: //(?:https?://)?(?:www.)?facebook.com/(?:(?:w)*#!/)?(?:pages/)?(?:[w-]*/)*([w-.]*)//: Range out of order in character class

通过阅读另一个类似的问题,我注意到我需要对某些字符进行双重转义,但我不知道我的模式中的哪一个。

【问题讨论】:

  • 你是如何在你的 javascript 中使用它的?

标签: javascript jquery regex


【解决方案1】:

从正则表达式模式中删除不需要的双引号:

 var pattern = /(?:https?:\/\/)?(?:www\.)?facebook\.com\/(?:(?:\w)*#!\/)?(?:pages\/)?(?:[\w\-]*\/)*([\w\-\.]*)/;

【讨论】:

  • 如果你愿意等到 StackOverflow 允许我这样做。
  • 此外,您不再需要new RegExp(pattern);只需使用pattern
【解决方案2】:

在 JavaScript 字符串中,所有反斜杠都应替换为双反斜杠

var pattern = "/(?:https?:\\/\\/)?(?:www\\.)?facebook\\.com\\/(?:(?:\\w)*#!\\/)?(?:pages\\/)?(?:[\\w\\-]*\\/)*([\\w\\-\\.]*)/";

【讨论】:

    【解决方案3】:

    如果它只是从 url http://www.facebook.com/xyz 获取 xyz 部分

    为什么不使用 split 呢?

    类似的东西

    var str = "http://www.facebook.com/xyz";
    var res = str.split('/').pop();
    console.log(res);
    

    【讨论】:

    • 这不仅仅是从 URL 中获取 xyz 部分。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多