如何知道一个字符串以jQuery中的特定字符串开头/结尾?


206

我想知道一个字符串是否以指定的字符/字符串开头或以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');
}

如果没有任何功能,那么还有其他选择吗?



2
是的,如果您的用户使用的Edge版本早于Edge,则不要使用ES6。
Antares42

Answers:


388

一种选择是使用正则表达式:

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工作谢谢您的回答。
黛博拉

2
请注意,您要检查的字符串不包含任何正则表达式保留字符。
nokturnal

23
传递一个正则表达式对象,而不是一个正则表达式的字符串似乎解决了问题@nokturnal提到:str.match(/^Hello/)但形式/regex/.test(str)是更好的这种特殊情况下,每stackoverflow.com/questions/10940137/...
CrazyPyro

这将返回匹配的字符串,但不返回布尔值。
RajKumar Samala

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");-当所选选项为“不可用-其他”时,为什么返回null?
egmfrs

96

对于startswith,可以使用indexOf:

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

...

参考

您可以根据字符串长度进行数学运算以确定“ endswith”。

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

11
您可能需要使用lastIndexOf();)
Reigel 2010年

小心,IE8浏览器不支持IndexOf。与lastIndexOf相同。
Pedro Lopes 2015年

1
对此我感到抱歉。我指的是仅支持iE9 +而不支持IE4 +的String.prototype.indexOf()的Array.prototype.indexOf()
Pedro Lopes

3
对于这样一个简单的用例,比使用正则表达式更安全的答案。应该应该接受答案。
AntonChanning

1
“ endswith”的代码错误。当检查未出现在字符串中且长度=(word-1)的字符串时。例如 ("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)结果为真。
Nick Russler

23

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)。


2
您能否提供有关不推荐使用的match()文档的链接?快速的Google搜索不会返回任何内容。
卡文·冯·戴伦

1
几年前,我在网上阅读过这本书,恐怕再也找不到确切的位置了。
Sebastien P.

16

您实际上并不需要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

目前在FF和Chrome中可用。对于旧的浏览器,您可以使用其polyfill或substr


10

您总是可以String像这样扩展原型:

//  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'
}

2

ES6现在支持用于检查s 开头和结尾的startsWith()and endsWith()方法string。如果要支持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(str.startsWith("foob"); // true
console.log(str.endsWith("rfoo");   // true

任何包含需要在正则表达式中转义的字符的字符串(例如()[].)都会破坏您的polyfill方法。您需要使用正则表达式转义函数准备字符串。甚至更好:使用core-js
耐拉兹(Nirazul)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.