文字列にJavaScriptで部分文字列が含まれているかどうかをチェックする方法



14 Answers

このステートメントでStringにcontainsメソッドを簡単に追加することができます:

String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

注:これを使用しない場合の有効な議論については、以下のコメントを参照してください。 私のアドバイス:あなた自身の判断を使用してください。

あるいは:

if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }
Question

通常、私はString.contains()メソッドを期待しますが、存在しないようです。

これをチェックする合理的な方法は何ですか?




簡単な回避策

if (!String.prototype.contains) {
  String.prototype.contains= function() {
    return String.prototype.indexOf.apply(this, arguments) !== -1;
  };
}

次のように使用できます

"hello".contains("he") // true
"hello world".contains("lo w")//true
"hello world".contains("lo wa")//false
"hello world".contains(" ")//true
"hello world".contains("  ")//false

MDNリファレンス







あなたが醜い-1のチェックを書くための代替手段を探していたならば、代わりにチルダを前に付けます。

if (~haystack.indexOf('needle')) alert('found');

Joe Zimmerman - 〜を使用すると-1が0に変換されることがわかります。数字の0は偽の値です。つまり、ブール値に変換されたときにfalseと評価されます。 最初は大きな見識のようには思えませんでしたが、indexOfのような関数はクエリが見つからないときに-1を返します。 つまり、これに似たものを書くのではなく、

if (someStr.indexOf("a") >= 0) {
  // Found it
} else  {
  // Not Found
}

あなたのコードの文字数を減らすことができますので、次のように書くことができます:

if (~someStr.indexOf("a")) {
  // Found it
} else  {
  // Not Found
}

詳細はこちら




JavaScript search()メソッドを使用できます。

構文は次のとおりですstring.search(regexp)

一致の位置を返します。一致するものが見つからない場合は-1を返します。

そこにある例を見てください: jsref_search

複雑な正規表現構文は必要ありません。 あなたがそれらに精通していない場合、単純なst.search("title")が行います。 テストで大文字小文字を区別しないようにするには、 st.search(/title/i)を実行する必要があります。




これを行う別のオプションは次のとおりです。

次のようなmatch関数を使うことができます:

x = "teststring";

if (x.match("test")) {
     // Code
}

match()は正規表現でも動作します:

x = "teststring";

if (x.match(/test/i)) {
     // Code
}



配列のcontainsメソッドを使用するJavaScriptコード:

<html>
    <head>
        <h2>Use of contains() method</h2>
        <script>
            Array.prototype.contains = function (element) {
                for (var i = 0; i < this.length; i++) {
                    if (this[i] == element) {
                        return true;
                    }
                }
                return false;
            }
            arr1 = ["Rose", "India", "Technologies"];
            document.write("The condition is "+arr1.contains("India")+"<br>");
        </script>
    </head>

    <b>[If the specified element is present in the array, it returns true otherwise
    returns false.]</b>

</html>

指定されたコードでcontainsメソッドは、指定された要素が配列内に存在するかどうかを判定します。 指定された要素が配列内に存在する場合はtrueを返し、そうでない場合はfalseを返します。




.indexOf String.prototype.indexOfを探していました。

indexOfは、一致する部分文字列にインデックスを返します。 索引は、部分文字列の開始位置と相関します。 一致するものがなければ、-1が返されます。 そのコンセプトの簡単なデモがあります:

var str = "Hello World"; // For example, lets search this string,
var term = "World"; // for the term "World",
var index = str.indexOf(term); // and get its index.
if (index != -1) { // If the index is not -1 then the term was matched in the string,
  alert(index); // and we can do some work based on that logic. (6 is alerted)
}




これを行うための洗練された良い方法があり、それは(BitWise NOT)演算子を使用しています。

if(~"John".indexOf("J")) {
  alert("Found")
}
else {
  alert("Not Found");
}

Bitwise Notは、xがindexOfメソッドから-1になった場合、 - (-1 + 1)= -0に変換され、偽の値である場合、 - (x + 1)に変換します。




最も簡単な方法は実際にindexOfを使用することです。 部分文字列substr文字stringをチェックするには、このメソッドを使うことができます:

string = "asdf";
substr = "as";
alert(string.indexOf(substr) == -1 ? false : true);

関数string.contains()を必要としていたので、次のように自分で実装することができます:

String.prototype.contains = function(test) {
    return this.indexOf(test) == -1 ? false : true;
};

このecen短いメソッドを使用して、文字列に特別な部分文字列が含まれているかどうかを確認できます。

string = "asdf";
alert(string.contains("as"));

JSFiddleもここにあります。




JavaScript

 var str = "My big string contain apples and oranges";
 var n = str.indexOf("apples"); 
 alert(n); //will alert 22, -1 if not found

jQuery

  <p>My big string contain apples and oranges</p>
  alert($("p:contains(apples)")[0] != undefined); //will alert true if found



var index = haystack.indexOf(needle);



JavaScriptにcontainsメソッドを書き込む一般的な方法は次のとおりです。

if (!String.prototype.contains) {
    String.prototype.contains = function (arg) {
        return !!~this.indexOf(arg);
    };
}

ビット単位の否定演算子( ~ )は、 -10 (偽)にするために使用され、他のすべての値はゼロ以外(真実)になります。

数値をブール値にキャストするには、二重論理否定演算子を使用します。




いくつかの有効なソリューションを収集するには:

var stringVariable = "some text";
var findString = "text";

//using `indexOf()`
var containResult1 = stringVariable.indexOf(findString) != -1;
document.write(containResult1+', ');

//using `lastIndexOf()`
var containResult2 = stringVariable.lastIndexOf(findString) != -1;
document.write(containResult2+', ');

//using `search()`
var containResult3 = stringVariable.search(findString) != -1;
document.write(containResult3+', ');
     
//using `split()`
var containResult4 = stringVariable.split(findString)[0] != stringVariable;
document.write(containResult4+'');




jQueryの:containsセレクタを使うことができます。

$("div:contains('John')")

それをここで確認してください: contains-selector




Related