1

したがって、基本的には、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 が返されます。これはうまくいくようですが、より良い方法があるかどうかはわかりませんか?また、正規表現が私の条件の防弾であるかどうかもわかりません。たくさんのリンクをスキャンする必要がある機能を構築しているので、最善/最速のソリューションを見つけたい

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 に答える