如何檢查一個字符串是否包含JavaScript中的子字符串?


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()方法,但似乎並不存在。

什麼是合理的方法來檢查這個?




有一個圓滑和更好的方式來做到這一點,它使用(BitWise NOT)運算符。

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

按位無法將“x”轉換為 - (x + 1),因此,如果x從indexOf方法變為-1,則它將轉換為 - (-1 + 1)= -0這是一個虛假值。




簡單的解決方法

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參考




您可以使用JavaScript search()方法。

語法是: string.search(regexp)

它返回匹配的位置,如果沒有找到匹配,則返回-1。

請參閱示例: jsref_search

您不需要復雜的正則表達式語法。 如果你不熟悉它們,一個簡單的st.search("title")就可以做到。 如果你想讓你的測試不區分大小寫,那麼你應該做st.search(/title/i)




JavaScript代碼在數組中使用contains方法:

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







你可以使用jQuery的:contains選擇器。

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

在這裡檢查: contains-selector




在JavaScript中編寫contains方法的常用方法是:

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

按位否定運算符( ~ )用於將-1變為0 (falsey),其他所有值都將為非零(真值)。

雙布爾否定運算符用於將數字轉換為布爾值。




最簡單的方法確實是使用indexOf 。 為了檢查一個字符串string的子字符串substr你可以使用這個方法:

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;
};

現在你可以使用這個更短的方法來檢查一個字符串是否包含一個特殊的子字符串:

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



這樣做的另一個選擇是:

您可以使用匹配功能,即如下所示:

x = "teststring";

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

match()也可以使用正則表達式:

x = "teststring";

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



您正在尋找String.prototype.indexOf.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)
}




var index = haystack.indexOf(needle);



如果您正在尋找替代方法來編寫醜陋的-1檢查,那麼您需要預先輸入〜代字符。

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

Joe Zimmerman--你會看到使用〜on -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
}

更多細節在這裡




收集某種有效的解決方案:

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+'');




Links