1

所以我基本上我想测试一个 url 是否匹配一个域,然后返回(如果它存在)最后一次出现的(破折号分隔)组 w 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。这似乎有效,但不确定是否有更好的方法?也不确定正则表达式是否适合我的条件。我正在构建一个需要扫描大量链接的功能,所以我想找到最好/最快的解决方案

4

2 回答 2

2

您的正则表达式将匹配以 test 结尾的域...

www.softwaretest.com/.....
www.valvetest.com/....

另外,你没有.[.]or逃脱\.,所以它也会匹配

www.test1com.com/...
www.testXcom.com/....

你的正则表达式应该是

https?://(www[.])?test[.]com.*-([A-Z]{4,5}[0-9]{3,5})
于 2013-07-13T13:04:08.353 回答
1

该功能很好,但没有必要使用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;
}
于 2013-07-13T13:00:28.433 回答