RegEx范围无序,复杂模式

时间:2014-03-06 09:59:06

标签: javascript jquery regex

这是我的模式:

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

从另一个类似问题的阅读中我注意到我需要双重逃避一些角色,但我不知道哪种角色来自我的模式。

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果它只是从网址xyz

获取http://www.facebook.com/xyz部分

为什么不使用拆分?

类似这样的事情

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