所以我本质上想测试一个url是否与一个域匹配,然后返回(如果存在)最后一次出现的一个(以破折号分隔)组,包含4-5个字符和3-5个数字。
function testLink (link) {
var reg = /test.com.*-([A-Z]{4,5}[0-9]{3,5})/i;
return try { link.match(reg)[1] } catch(e) { false }
}
testLink('http://www.test.com/something-test-C34-CAA0004-CJFE348');
==> CJFE348
匹配返回带有完整测试字符串的数组,然后返回我的模式。如果失败,try-catch将被命中并返回false。这似乎有效,但不确定是否有更好的方法?也不确定regex是否符合我的条件。我正在构建一个需要扫描大量链接的功能,所以我想找到最好/最快的解决方案
您的正则表达式将匹配以test结尾的域。。。
www.softwaretest.com/.....
www.valvetest.com/....
此外,您还没有用[.]
或.
转义.
,因此它也将匹配
www.test1com.com/...
www.testXcom.com/....
您的正则表达式应该是
https?://(www[.])?test[.]com.*-([A-Z]{4,5}[0-9]{3,5})
函数很好,但不需要使用try-catch
:
function testLink (link) {
var your_match = link.match(/test.com.*-([A-Z]{4,5}[0-9]{3,5})/i);
// Not sure why do you want to return "false" rather than "null"
return your_match ? your_match[1] : null;
}