2009-11-19 53 views
231

可能重複:
Javascript StartsWith檢查字符串是否以某種東西開始?

我知道,我可以這樣做^ =以查看是否有ID的東西開始,我嘗試使用,對於這一點,但它沒」將不起作用......基本上,我檢索的URL,我想設置爲以某種方式開始的路徑名元素的類...

所以,

var pathname = window.location.pathname; //gives me /sub/1/train/yonks/459087 

我想確保所有以/分/ 1開始的路徑,我可以設置一個類的元素...

if(pathname ^= '/sub/1') { //this didn't work... 
     ... 
+0

'/^\/sub \/1。* $/gi.test(pathname)'將返回一個布爾值作爲謂詞。 – 2016-06-23 14:12:19

+1

如果你沮喪年以後來到這裏(我自己)的[原創與複製後的Javascript StartsWith(http://stackoverflow.com/questions/646628/how-to-check-if-a-string-startswith-另一個字符串)提供了一個非常簡潔的答案,使用Ecmascript 6 startWith()函數,似乎有最好的表現。 – theFreedomBanana 2016-09-22 07:36:19

回答

341

使用stringObject.substring

if (pathname.substring(0, 6) == "/sub/1") { 
    // ... 
} 
+15

-1:創建一個額外的冗餘字符串。 – user1071136 2013-01-17 19:57:36

+9

這是一個測試用例:http://jsperf.com/starts-with/2。子串方法似乎是我的機器上最快(使用V8)。 – Pijusn 2013-07-20 19:34:36

+19

這可以由更通用的,如下所示: 'VAR X = 「/分/ 1」; 如果(pathname.substring(0,x.length)=== X){ // ... };'。這樣你就不再依賴知道'x'的長度,因爲它可能會改變。 – 2015-07-12 11:34:32

79

您可以使用string.match()併爲此正則表達式太:如果發現

if(pathname.match(/^\/sub\/1/)) { // you need to escape the slashes 

string.match()將返回匹配的子字符串數組,否則

+22

+1有什麼辦法在expr中動態插入一個url字符串?例如在URL中轉義/? – Mercurybullet 2011-11-09 21:54:25

+0

的長度,創建一個新的字符串本身:) – Tjorriemorrie 2013-07-11 13:04:32

+1

@Tjorriemorrie您可以使用正則表達式類來實現這一點,像VAR reUrlTester =新的正則表達式(your_url_string);如果(reUrlTester.test(url)){//使用測試函數來查看url是否匹配。 – Cros 2013-08-05 11:02:25

34

多一點可重複使用的功能:

beginsWith = function(needle, haystack){ 
    return (haystack.substr(0, needle.length) == needle); 
} 
170
String.prototype.startsWith = function(needle) 
{ 
    return this.indexOf(needle) === 0; 
}; 
+9

-1看評論這裏的正當理由不使用這種類型的實現:HTTP:// stackoverflow.com/a/1978419/560287 – 2013-03-30 23:46:25

+12

+1 indexOf是完美的!我只建議不要將方法添加到您不擁有的對象。 – collimarco 2013-08-03 17:15:48

+1

這是一個完美的答案(indexOf事物)比被標記爲答案的答案。 – 2013-08-07 00:05:24

22

首先,讓延長字符串對象。感謝里卡多佩雷斯的原型,我認爲使用變量'字符串'比'針'更好的可讀性。

String.prototype.beginsWith = function (string) { 
    return(this.indexOf(string) === 0); 
}; 

然後你就這樣使用它。警告!使代碼非常可讀。

var pathname = window.location.pathname; 
if (pathname.beginsWith('/sub/1')) { 
    // Do stuff here 
} 
+4

不是真的添加任何東西。 – ratbum 2013-09-11 08:48:12

+0

恕我直言,** **的indexOf搜索整個字符串,如果沒有找到在其開始立即匹配:所以它的低效率的增長非常長的字符串進行搜索。 – 2017-04-08 00:14:29

相關問題