2013-10-14 92 views
0

我有以下代碼(currHost是主機名):正則表達式對主機名

if (currHost.match(/(alpha|beta|test|dev|load|local)\./)) 

但我需要添加額外的條件,如

  • 文件:

    • .od *。 (*是通配符)
    • dev-wa。
    • .sq *。 (*爲通配符)
    • .hbox。

實施例相符的網址:

  • 文件:// C:blahblahblah
  • www.sqc.mydomain.com
  • www.sqa.mydomain.com
  • WWW .odd.mydomain.com
  • www.odp.mydomain.com
  • www.hb ox.mydomain.com
  • dev-wa.mydomain.com

實施例不匹配URLS:

  • www.sqcmydomain.com
  • www.sqamydomain.com
  • 萬維網。 oddmydomain.com
  • www.odp.mydomain.com
  • www.hboxx.mydomain.com
  • dev-waa.mydomain.com

不知道該如何處理?

謝謝!

+2

你的問題不是很清楚。你能向我們展示一些應該匹配的有效字符串嗎?同時也將規則列爲重點。這會更容易理解這個問題。 –

+0

主機名不能包含:在其中。你是針對整個網址還是隻匹配主機名? –

+0

與主機進行匹配,但我想我必須使用document.location.href而不是主機名,因爲本地文件(「files:」)不會包含在document.location.hostname中 –

回答

0
if (currHost.match(/(alpha|beta|test|dev|load|local|file:|dev-wa|od\*|hbox)?\./)) 

只需添加如上?或者你的意思是別的嗎?我從asterix中添加了一個斜槓。在結尾加上一個問號,使其ungreedy

+2

'dev *'和'od *'可以匹配'de','devvv','od'和'oddd'等主機。這不是我認爲的OP需求。 –

+0

問號在表達式之外,即'無效的JS。 –

+0

改變它回到裏面,並逃脫星號,我可能意味着什麼 – Martijn

1

爲您的文件相匹配,你可以簡單地使用

document.location.protocol == 'file:' 

,你要尋找的表達

curHost.match(/(alpha|beta|test|dev|load|local|\.od.*|dev-wa|\.sq.*|\.hbox)\./) 

只要記住這個表達也將匹配www.od.mydomain.com oddmydomain.com,因爲它也是有效的匹配。如果你不想要這個,你需要指定一個完整的表達式(使用.com部分)或者指定od/sq部分之後的字符數。例如

curHost.match(/(alpha|beta|test|dev|load|local|\.od.{1}|dev-wa|\.sq.{1}|\.hbox)\./) 

對於一個字母匹配。

如果您只想在域的開始處特別匹配那些字符串,可以使用或不使用www。你可以用

curHost.match(/^(www\.)?(alpha|beta|test|dev|load|local|od.+|dev-wa|sq.+|hbox)\./) 
+0

剛回來回答,但這是一個竅門。你可以在第一組前加上'^',以確保它必須從那些開始。更安全 – Martijn

+0

@Tsanyo Tsanev - curHost.match(/(alpha | beta | test | dev | load | local | \ .od。{1} | dev-wa | \ .sq。{1} | \ .hbox )\ ./)似乎工作正常!非常感謝你! –

+0

@Martijn我在第三個例子中做過,但也有一些與www有關的例子。在前面,所以我不希望表達太嚴格。 –