string - كيفية التحقق مما إذا كانت سلسلة تحتوي على سلسلة فرعية في JavaScript؟




substring contains string-matching (25)

تحتاج إلى استدعاء indexOf برأس مال "O" كما ذكر. وتجدر الإشارة أيضًا إلى أنه في فئة جافا سكريبت كلمة محجوزة ، يلزمك استخدام className للحصول على سمة البيانات هذه. السبب في فشلها على الأرجح هو أنها تعيد قيمة فارغة. يمكنك القيام بما يلي للحصول على قيمة صفك ...

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

عادة ما أتوقع طريقة String.contains() ، ولكن لا يبدو أن هناك واحدة.

ما هي الطريقة المعقولة للتحقق من ذلك؟


في ES6 ، لدينا مكالمات تتضمن ما يقوم به بالضبط ما تريد: لذا يمكنك ببساطة القيام بهذا:

'str1'.includes('str2');

أيضًا في ES5 ، إذا كنت تستخدمه على نطاق واسع ، فيمكنك ببساطة إضافته كما يلي:

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


هناك string.includes في ES6 :

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

ملاحظة قد تحتاج إلى تحميل es6-shim أو ما شابه ذلك للحصول على هذا العمل على المتصفحات القديمة.

require('es6-shim')

يمكنك استخدام طريقة JavaScript search() .

البناء هو: string.search(regexp)

تقوم بإرجاع موضع المطابقة أو -1 إذا لم يتم العثور على تطابق.

انظر الأمثلة هناك: jsref_search

لست بحاجة إلى صيغة تعبير عادية معقدة. إذا لم تكن على دراية بها st.search("title") بسيط. إذا كنت تريد أن يكون الاختبار الخاص بك غير حساس لحالة الأحرف ، فيجب عليك القيام بـ st.search(/title/i) .


تكمن المشكلة في التعليمة البرمجية في أن جافا سكريبت حساس لحالة الأحرف. استدعاء الأسلوب الخاص بك

indexof()

يجب أن يكون في الواقع

indexOf()

جرّب إصلاحه ومعرفة ما إذا كان ذلك يساعد على:

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

يمكنك استخدام jQuery's :contains المحدّد.

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

التحقق من ذلك هنا: contains-selector


يجب أن تعمل هذه الشفرة بشكل جيد:

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

جافا سكريبت

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

مسج

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

هنا قائمة من الاحتمالات الحالية:

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 قد يكون الخيار الأفضل ، إذا وصل الأمر إلى نقطة تؤثر فيها السرعة.


استخدم inbuilt وأبسط واحد أي 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");
}

حل بسيط

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


شفرة جافا سكريبت لاستخدام الطريقة التي 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.


كنت تبحث عن .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)
}


var index = haystack.indexOf(needle);

هناك طريقة أنيق وأفضل للقيام بذلك وهو يستخدم عامل التشغيل (BitWise NOT).

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

Bitwise لا يحول "x" إلى - (x + 1) ، إذا كان x يتحول إلى -1 من أسلوب indexOf.then سيتم تحويله إلى - (-1 + 1) = -0 وهي قيمة كاذبة.


في ES5

var s = "foo";
alert(s.indexOf("oo") > -1);

في ES6 هناك ثلاث طرق جديدة: includes() ، startsWith() ، endsWith() .

var msg = "Hello world!";

console.log(msg.startsWith("Hello"));       // true
console.log(msg.endsWith("!"));             // true
console.log(msg.includes("o"));             // true

console.log(msg.startsWith("o", 4));        // true
console.log(msg.endsWith("o", 8));          // true
console.log(msg.includes("o", 8));          // false



مثال

var a  = "Test String";

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

إذا كنت تبحث عن بديل لكتابة الشيك القبيح -1 ، فأنت تقترب من التيلدا بدلاً من ذلك.

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

جو زيمرمان - سترى أن استخدام ~ في -1 يحولها إلى 0. الرقم 0 هو قيمة خادعة ، بمعنى أنه سيتم تقييمه إلى خطأ عند تحويله إلى قيمة منطقية. قد لا يبدو ذلك بمثابة إحصاء كبير في البداية ، ولكن تذكر أن الدالات مثل indexOf ستعود -1 عندما لا يتم العثور على الاستعلام. هذا يعني أنه بدلاً من كتابة شيء مشابه لهذا:

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

يمكنك الآن الحصول على عدد أقل من الأحرف في شفرتك حتى تتمكن من كتابتها كما يلي:

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

مزيد من التفاصيل هنا


هذا فقط عملت بالنسبة لي. وهي تحدد السلاسل التي لا تحتوي على المصطلح "المحذوفة:"

if (eventString.indexOf("Deleted:") == -1)

خيار آخر للقيام بذلك هو:

يمكنك استخدام وظيفة المطابقة ، أي شيء من هذا القبيل:

x = "teststring";

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

يمكن أن تعمل match () أيضًا مع التعبير العادي:

x = "teststring";

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

بما أن السؤال شائع جدًا ، أعتقد أنه يمكنني إضافة القليل من النكهة الحديثة إلى الشفرة.

// const           : creates an immutable constant
const allLinks   = document.getElementsByTagName("a");
// [].reduce.call  : gives access to the reduce method on a HTMLCollection
// () => {}        : ES6 arrow function
const foundLinks = [].reduce.call(allLinks, (sum, link) => {
     // bitwise OR : converts the boolean value to a number
     return sum + (link.classList.contains("title") | 0);
}, 0);

// template literal
console.log(`Found ${foundLinks || "no"} title class`);

راجع للشغل ، والإجابة الصحيحة هي الخطأ الإملائي indexOf أو String.contains غير قياسي. تحميل مكتبة خارجية (خاصة إذا كانت الشفرة مكتوبة بلغة JavaScript خالصة) أو العبث مع String.prototype أو باستخدام تعبير عادي هو مبالغة صغيرة.


الطريقة الشائعة لكتابة أسلوب contains JavaScript هي:

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

يتم استخدام عامل الإبطال الخاص بـ bitwise ( ~ ) لتحويل -1 إلى 0 (falsey) ، وتكون كافة القيم الأخرى غير صفرية (truthy).

يتم استخدام عوامل نفي منطقية مزدوجة لإلقاء الرقم في منطقي.


هنا إجابتك:

if "insert_char_or_string_here" in "insert_string_to_search_here":
    #DOSTUFF

للتحقق مما إذا كانت خاطئة:

if not "insert_char_or_string_here" in "insert_string_to_search_here":
    #DOSTUFF

أو:

if "insert_char_or_string_here" not in "insert_string_to_search_here":
    #DOSTUFF




javascript string substring contains string-matching