我正在尝试为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匹配。换句话说,两个字符串都应匹配,但不应检查关键字的部分。我做错了吗?
答案 0 :(得分:3)
这是固定的正则表达式:
/http:\/\/encore\.lsbu\.ac\.uk\/iii\/encore\/search\/C%257CS[a-z0-9]*%257COrightresult%257CU1\?lang=eng&suite=pearl/i
我对它做了以下更改:
[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