用于匹配不同URL的正则表达式

时间:2011-06-26 15:30:16

标签: javascript regex

我正在尝试为URL匹配编写正则表达式,但它无效。

主题网址是......

var subject = "http://encore.lsbu.ac.uk/iii/encore/search/C%257CSab%257COrightresult%257CU1?lang=eng&suite=pearl";

正则表达式是......

var regex = /http:\/\/encore.lsbu.ac.uk\/iii\/encore\/search\/C%257CS[a-z][A-Z][0-9]%257COrightresult%257CU1?lang=eng&suite=pearl/i;

我正在使用JavaScript来测试它。

var answer = regex.test(subject);
// answer is false

目标是将任何URL与在字符串中间更改了关键字的正则表达式进行匹配,但整个字符串与URL匹配。换句话说,两个字符串都应匹配,但不应检查关键字的部分。我做错了吗?

2 个答案:

答案 0 :(得分:3)

这是固定的正则表达式:

/http:\/\/encore\.lsbu\.ac\.uk\/iii\/encore\/search\/C%257CS[a-z0-9]*%257COrightresult%257CU1\?lang=eng&suite=pearl/i

我对它做了以下更改:

  • 使用反斜杠转义URL中的点。
  • [a-z][A-Z][0-9]更改为[a-z0-9]*以匹配重复零次或多次的任何字符。
    • 您也可以使用+代替*来匹配字符一次或多次,或{2}将它们匹配两次(在示例字符串中就是这种情况,但可能并非在所有情况下都是。)
  • 使用反斜杠在网址中隐藏问号。

修改:删除了A-Z,因为它不需要(正则表达式不区分大小写)。

答案 1 :(得分:1)

如果我理解正确,您尝试匹配该网址,除非您希望接受任何关键字字符而不是原始字符串中的“ab”。

作为参考,[a-z] [A-Z] [0-9]表示你想要一个小写字符,然后是一个大写字符,然后是一个数字。请尝试使用\ w,而不是匹配其中任何一个。

如果您想接受任意长度的关键字,请使用\ s +。如果您想将其限制为两个字符,请尝试\ w {2,2}。

所以你网址的相关部分是:

/C%257CS\s+%257
相关问题