文字列が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より古いIEを使用しているユーザーがいる場合は、まだES6を使用しないでください。
Antares42

回答:


388

1つのオプションは、正規表現を使用することです。

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 2013

23
regex文字列の代わりにregexオブジェクトを渡すと、@ nokturnalの言及の問題が解決するようです:str.match(/^Hello/)しかし、/regex/.test(str)この特定のケースでは、stackoverflow.com
questions

これは一致した文字列を返しますが、ブール値は返しません。
RajKumarサマラ2017

var isUnavailable = $("#StatusId option:selected").text().match("^Unavailable - ");-選択したオプションが「使用不可-その他」の場合、なぜこれがnullを返すのですか?
egmfrs

96

startswithの場合、indexOfを使用できます。

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

...

ref

また、文字列の長さに基づいて計算を行い、「endswith」を決定できます。

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

11
あなたlastIndexOf()はendswithで使用したいかもしれません;)
Reigel

IndexOfはIE8ブラウザーではサポートされていません。lastIndexOfと同じです。
Pedro Lopes

1
ご迷惑をおかけして申し訳ございません。私は、IE4 +であるString.prototype.indexOf()ではなく、iE9 +でのみサポートされているArray.prototype.indexOf()を参照していました
Pedro Lopes

3
このような単純なユースケースで正規表現を使用するよりもはるかに安全な答えです。おそらく答えを受け入れる必要があります。
AntonChanning

1
「endswith」のコードに欠陥があります。文字列に現れず、長さが=(word-1)である文字列をチェックするとき。例:("1234".lastIndexOf('Hello') == "1234".length - 'Hello'.length)結果は真です。
Nick Russler、2017年

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検索では何も返されません。
Cavyn VonDeylen 2012

1
私はそれを数年前にオンラインで読んだのですが、もう正確にはどこにあるのかわかりません。
Sebastien P.

16

そのようなタスクにはjQueryは実際には必要ありません。ES6仕様では、すぐに使えるメソッドstartsWithextendsWithがあります。

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で利用可能です。古いブラウザの場合は、ポリフィルまたは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()およびendsWith()メソッドをサポートするようになりましたstring。ES6以前のエンジンをサポートする場合は、提案されたメソッドの1つを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

正規表現(など()[].)で使用するためにエスケープする必要のある文字を含む文字列は、ポリフィルメソッドを破壊します。regex-escape関数を使用して文字列を準備する必要があります。またはさらに良い:戦闘テスト済みのポリフィルを使用するcore-js
nirazul
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.