2010-09-15 43 views
173

我想知道一個字符串是以指定的字符/字符串開頭,還是以jQuery結尾。如何知道一個字符串開始/結束jQuery中的特定字符串?

例如:

var str = 'Hello World'; 

if(str starts with 'Hello') { 
    alert('true'); 
} else { 
    alert('false'); 
} 

if(str ends with 'World') { 
    alert('true'); 
} else { 
    alert('false'); 
} 

如果沒有任何功能,那麼任何替代?

+0

使用[ES6的新功能(http://stackoverflow.com/a/25797279/1090562) – 2015-09-18 07:39:33

+1

是啊,但還是沒有,如果你有使用IE比邊緣老年用戶使用ES6呢。 – Antares42 2016-10-18 08:17:19

回答

329

一種選擇是使用正則表達式:

if (str.match("^Hello")) { 
    // do this if begins with Hello 
} 

if (str.match("World$")) { 
    // do this if ends in world 
} 
+1

jQuery中我試圖str.startsWith(「一番檢查字符串..」)這給了我一個錯誤說,沒有發現startsWith方法.. :(但str.match工作。感謝您的回答 – 2012-04-22 07:01:01

+2

只是要小心的字符串你檢查不包含任何正則表達式保留字符 – nokturnal 2013-02-22 20:31:10

+16

傳遞一個正則表達式對象,而不是一個正則表達式的字符串似乎解決@nokturnal提到的問題:'str.match(/ ^你好/)' 但形式'/regex/.test( str)'是更好的這個特殊情況下,每個http://stackoverflow.com/questions/10940137/regex-test-vs-string-match-to-know-if-a-string-matches-a-regular- 。表達 – CrazyPyro 2013-09-05 03:59:47

84

對於startswith,你可以使用的indexOf:

if(str.indexOf('Hello') == 0) { 

...

ref

,你可以做基於字符串的長度來確定 '的endsWith' 的數學。

if(str.lastIndexOf('Hello') == str.length - 'Hello'.length) { 
+8

您可能希望使用'lastIndexOf()'作爲endswith;) – Reigel 2010-09-15 07:05:41

+0

小心,IndexOf在IE8瀏覽器中不受支持。與lastIndexOf相同。 – 2015-06-09 18:22:10

+1

我對此感到抱歉。我指的是僅支持iE9 +而不支持String.prototype.indexOf()(即IE4 + – 2015-07-03 15:18:36

19

沒有必要的jQuery的做到這一點。你可以編寫一個jQuery的包裝,但它是無用的,所以你應該更好地利用

var str = "Hello World"; 

window.alert("Starts with Hello ? " + /^Hello/i.test(str));   

window.alert("Ends with Hello ? " + /Hello$/i.test(str)); 

爲match()方法已過時。

PS:RegExp中的「i」標誌是可選的,代表不區分大小寫(所以它也會在「hello」,「hEllo」等中返回true)。

+1

+1這裏測試:http://jsfiddle.net/zTLrU/ – NAVEED 2010-09-15 09:13:21

+1

+1感謝包括「不區分大小寫」部分 – 2011-11-09 17:18:31

+2

你能提供一個鏈接到問題解決的文匹配()的入侵被棄用?快速的Google搜索不會返回任何內容。 – 2012-09-19 13:33:59

10

你並不需要jQuery來處理這些任務。在ES6規範中,他們已經有了開箱即用的方法startsWithendsWith

var str = "To be, or not to be, that is the question."; 
alert(str.startsWith("To be"));   // true 
alert(str.startsWith("not to be"));  // false 
alert(str.startsWith("not to be", 10)); // true 

var str = "To be, or not to be, that is the question."; 
alert(str.endsWith("question.")); // true 
alert(str.endsWith("to be"));  // false 
alert(str.endsWith("to be", 19)); // true 

Currently available in FF and Chrome。對於舊的瀏覽器可以使用他們的polyfills或SUBSTR

+3

在IE10或11中不起作用 – 2017-05-05 02:09:20

7

你總是可以延長線的原型是這樣的:

// Checks that string starts with the specific string 
if (typeof String.prototype.startsWith != 'function') { 
    String.prototype.startsWith = function (str) { 
     return this.slice(0, str.length) == str; 
    }; 
} 

// Checks that string ends with the specific string... 
if (typeof String.prototype.endsWith != 'function') { 
    String.prototype.endsWith = function (str) { 
     return this.slice(-str.length) == str; 
    }; 
} 

,並使用它像這樣

var str = 'Hello World'; 

if(str.startsWith('Hello')) { 
    // your string starts with 'Hello' 
} 

if(str.endsWith('World')) { 
    // your string ends with 'World' 
} 
0

ES6現在支持startsWith()endsWith()方法用於檢查string s的開始和結束。如果您想要支持es6以前的引擎,則可能需要考慮將其中一種建議的方法添加到String原型中。

if (typeof String.prototype.startsWith != 'function') { 
    String.prototype.startsWith = function (str) { 
    return this.match(new RegExp("^" + str)); 
    }; 
} 

if (typeof String.prototype.endsWith != 'function') { 
    String.prototype.endsWith = function (str) { 
    return this.match(new RegExp(str + "$")); 
    }; 
} 

var str = "foobar is not barfoo"; 
console.log(startsWith("foob"); // true 
console.log(endsWith("rfoo"); // true 
相關問題