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




jquery字串包含 (24)

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

語法是: string.search(regexp)

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

參見那裡的例子: jsref_search

您不需要復雜的正則表達式語法。 如果您不熟悉它們,可以使用簡單的st.search("title") 。 如果您希望測試不區分大小寫,那麼您應該進行st.search(/title/i)

通常我會期望一個String.contains()方法,但似乎沒有。

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


您的代碼存在的問題是JavaScript區分大小寫。 你的方法調用

indexof()

應該是

indexOf()

嘗試修復它,看看是否有幫助:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}

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

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


有一種更流暢,更好的方法,它使用(BitWise NOT)運算符。

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

按位不將“x”轉換為 - (x + 1)所以,如果x從indexOf方法變為-1,那麼它將轉換為 - (-1 + 1)= -0這是一個假值。


以下列出了當前的可能性:

1.(ES6) includes - 去回答

var string = "foo",
    substring = "oo";
string.includes(substring);

2. ES5和更老的indexOf

var string = "foo",
    substring = "oo";
string.indexOf(substring) !== -1;

String.prototype.indexOf返回另一個字符串中字符串的位置。 如果未找到,則返回-1

3. search - 去回答

var string = "foo",
    expr = /oo/;
string.search(expr);

4. lodash包括 - 去回答

var string = "foo",
    substring = "oo";
_.includes(string, substring);

5. RegExp - 去回答

var string = "foo",
    expr = /oo/;  // no quotes here
expr.test(string);

6.匹配 - 去回答

var string = "foo",
    expr = /oo/;
string.match(expr);

性能測試表明,如果速度很重要, indexOf可能是最佳選擇。


var a  = "Test String";

if(a.search("ring")!=-1){
     //exist 
} else {
     //not found 
}

您可以使用以下語句輕鬆地將contains方法添加到String:

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

由於存在關於使用原型的抱怨,並且因為使用indexOf會使您的代碼可讀性降低,並且因為regexp是過度殺傷:

function stringContains(inputString, stringToFind) {
    return (inputString.indexOf(stringToFind) != -1);
}

這就是我最終要做的妥協。


簡單的解決方法

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



var index = haystack.indexOf(needle);

使用內置且最簡單的一個,即字符串上的match() 。 要實現您期待的目標,請執行以下操作:

var stringData ="anyString Data";

var subStringToSearch = "any";

// This will give back the substring if matches and if not returns null
var doesContains = stringData.match(subStringToSearch);

if(doesContains !=null) {
    alert("Contains Substring");
}

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


String.prototype.includes()是在ES6中引入的。

確定是否可以在另一個字符串中找到一個字符串,並根據需要返回true或false。

句法

var contained = str.includes(searchString [, position]);  

參數

searchString

要在此字符串中搜索的字符串。

position

此字符串中開始搜索searchString默認為0。

var str = "To be, or not to be, that is the question.";

console.log(str.includes("To be"));    // true
console.log(str.includes("question")); // true
console.log(str.includes("To be", 1)); // false  

注意

這可能需要舊版瀏覽器中的ES6墊片。


這段代碼應該運行良好:

var str="This is testing for javascript search !!!";
if(str.search("for") != -1) {
   //logic
} 

如上所述,您需要使用大寫“O”調用indexOf。 還應該注意,在JavaScript類中是保留字,您需要使用className來獲取此數據屬性。 它可能失敗的原因是因為它返回一個空值。 您可以執行以下操作來獲取類值...

var test = elm.getAttribute("className");
//or
var test = elm.className

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

ES6中有一個string.includes

"potato".includes("to");
> true

請注意,您可能需要加載es6-shim或類似內容才能在舊版瀏覽器上使用它。

require('es6-shim')

如果你正在尋找一種替代方法來編寫醜陋的-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
}

更多細節在這裡


這樣做的另一個選擇是:

您可以使用匹配功能,即:

x = "teststring";

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

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

x = "teststring";

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

你可以使用jQuery :contains selector。

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

在這裡檢查: contains-selector


String.prototype.indexOf()String.prototype.search()

正如其他人已經提到的,JavaScript字符串同時具有String.prototype.indexOfsearch方法。

兩者之間的關鍵區別在於indexOf僅用於普通子串,而search也支持正則表達式。 當然,使用indexOf的好處是它更快。

另請參見在JavaScript中,indexOf()和search()之間有什麼區別?

實現自己的String.prototype.contains()方法

如果你想為每個字符串添加你自己的contains方法,那麼最好的方法就是的方法:

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

你會像這樣使用它:

'Hello World'.contains('orl');

實現自定義實用程序庫

例如,通常不贊成將自己的自定義方法添加到JavaScript中的標準對象,因為它可能會破壞兼容性。

如果您真的需要自己的contains方法和/或其他自定義字符串方法,最好創建自己的實用程序庫並將自定義字符串方法添加到該庫:

var helper = {};

helper.string = {
    contains : function (haystack, needle) {
        return !!~haystack.indexOf(needle);
    },
    ...
};

你會像這樣使用它:

helper.string.contains('Hello World', 'orl');

使用第三方實用程序庫

如果您不想創建自己的自定義幫助程序庫,當然 - 始終可以選擇使用第三方實用程序庫。 正如所提到的,最受歡迎的是LodashLodash

在Lodash中,你可以使用_.includes() ,你可以這樣使用:

_.includes('Hello World', 'orl');

_.str.include() ,您可以使用_.str.include() ,您可以像這樣使用:

_.str.include('Hello World', 'orl');

您可以使用經過充分測試和記錄的庫,而不是使用網絡上此處和此處找到的代碼段。 我建議的兩個選項:

第一個選項:使用Lodash :它有一個includes方法:

_.includes('foobar', 'ob');
// → true

Lodash是npm最受歡迎的javascript庫依賴項,並且有大量方便的javascript實用程序方法。 因此,對於許多項目,無論如何你都會想要這個;-)

第二個選項:或者使用Underscore.string :它有一個include方法:

_.str.include('foobar', 'ob');
// → true

這裡是Underscore.string的描述,它只增加了9kb,但是為您提供了經過充分測試和記錄的庫具有over copy'n'paste代碼片段的所有優點:

Underscore.string是用於使用字符串進行舒適操作的JavaScript庫,受Prototype.js,Right.js,Underscore和漂亮的Ruby語言啟發的Underscore.js的擴展。

Underscore.string為您提供了幾個有用的函數:capitalize,clean,includes,count,escapeHTML,unescapeHTML,insert,splice,startsWith,endsWith,titleize,trim,truncate等。

請注意,Underscore.string受Underscore.js的影響,但可以在沒有它的情況下使用。

最後不是最少:使用JavaScript版本ES6內置includes方法:

'foobar'.includes('ob');
// → true

大多數現代瀏覽器已經支持它,請關注ES6兼容性表


ES6中 ,我們有一些調用包含 ,它完全符合你的要求:所以你可以這樣做:

'str1'.includes('str2');

同樣在ES5中 ,如果你廣泛使用它,你可以簡單地添加它:

String.prototype.includes = String.prototype.includes || function(str) {
  return this.indexOf(str) > -1;
}






string-matching