正則表達式的樂趣...正則表達式匹配部分的字符串再次
就拿http://something.com/en/page
我想測試一個精確匹配上/ EN /包括斜線,否則它會匹配「 en'來自字符串的其他部分。
我確定這很容易,對於除我以外的人!
編輯:
我使用它的string.match()在JavaScript
正則表達式的樂趣...正則表達式匹配部分的字符串再次
就拿http://something.com/en/page
我想測試一個精確匹配上/ EN /包括斜線,否則它會匹配「 en'來自字符串的其他部分。
我確定這很容易,對於除我以外的人!
編輯:
我使用它的string.match()在JavaScript
那麼這真的取決於編程語言將執行正則表達式,但實際正則表達式是簡單
/en/
對於.Net,以下代碼正常工作:
string url = "http://something.com/en/page";
bool MatchFound = Regex.Match(url, "/en/").Success;
以下是JavaScript版本:
var url = 'http://something.com/en/page';
if (url.match(/\/en\//)) {
alert('match found');
}
else {
alert('no match');
}
DUH
謝謝Welbog和克里斯·巴蘭斯,以使什麼應該是最明顯的一點。這不需要正則表達式來解決。它只是一個包含聲明。正則表達式只能用在需要的地方,應該是我的第一個考慮因素,而不是最後一個。
任何理由/en/
是行不通的?
這是行不通的,因爲斜槓是正則表達式的組成部分,因此需要根據Parappa的回答來逃避它,因爲斜槓通常用作正則表達式的指示符,在大多數posix兼容系統(如unix)中,會有額外的信息提供,例如搜索忽略大小寫字符串將/ some_string /我。 – t0mm13b 2009-11-23 19:01:10
而且它基於什麼編程語言,請參閱TheLameDuck的答案。絕對是C#,你需要避開正斜槓。 – t0mm13b 2009-11-23 19:02:20
雖然我很欣賞這些榮譽,但它只是反斜槓\才需要被轉義。 另外,如果出現問題,您可以隨時迴避整個問題,例如:string test =#「my back \ slash」; – 2009-11-23 19:04:22
您可能需要逃避正向斜線...
/\/en\//
只要做一個字符串匹配,正則表達式對於這種情況是矯枉過正的。 – 2009-11-23 22:08:06
/\/en\//
或許/http\w*:\/\/[^\/]*\/en\//
如果你想爲特別地匹配/en/
,你並不需要一個正則表達式的。只需使用您的語言相當於contains
來測試該子字符串。
如果你想匹配的兩條斜線之間的URL中的任意兩個字母的一部分,你需要這樣的表達式:
/../
如果你想要捕捉的兩個字母的代碼,封閉期間括號:
/(..)/
根據你的語言,你可能需要逃避斜線:
\/..\/
\/(..)\/
如果你想確保你匹配字母代替任何字符(包括數字和符號),您可能希望使用表達式像這個:
/[a-z]{2}/
這將大多數正則表達式的變化來識別。
同樣,你可以逃避斜線,並添加一個捕獲組是這樣的:
\/([a-z]{2})\/
如果你不需要逃避他們:
/([a-z]{2})/
這個表達式將匹配任何字符串形式爲/xy/
,其中x
和y
是字母。所以它會匹配/en/
,/fr/
,/de/
等
在JavaScript中,您將需要轉義版本:\/([a-z]{2})\/
。
+1指出Regexps對於精確匹配不是必需的。 – Heinzi 2009-11-23 19:32:55
你並不需要爲這個正則表達式:
location.pathname.substr(0, 4) === "/en/"
當然,如果你堅持使用正則表達式,使用:
/^\/en\//.test(location.pathname)
有關的編程語言,你需要的正則表達式? C#和VB.net,例如都明白'「/ en /」',但這顯然不是你正在尋找的...... – Heinzi 2009-11-23 18:59:25
@Heinzi - JavaScript有定義一個正則表達式的速記方式,例如var someRegex =/\/en \ // ig,它也可以像這樣寫var someRegex = new RegExp(「/ en /」,「ig」)。速記方式通常是優選的。我只使用新的RegExp,如果我需要通過串聯字符串來構建正則表達式。 – nickytonline 2009-11-23 19:15:55