[javascript] JavaScript에서 문자열에 하위 문자열 배열의 텍스트가 포함되어 있는지 확인하는 방법은 무엇입니까?

꽤 직설적 인. 자바 스크립트에서 문자열에 배열에 포함 된 하위 문자열이 포함되어 있는지 확인해야합니다.



답변

당신을 위해 그것을 할 내장 기능은 없습니다, 당신은 그것을위한 함수를 작성해야합니다.

당신이 경우 문자열이 정규 표현식에서 특별 문자 중 하나를 포함하지 않는, 당신은이 같은 비트를 속일 수 있습니다 :

if (new RegExp(substrings.join("|")).test(string)) {
    // At least one match
}

… 당신이 찾고있는 하위 문자열에 대한 일련의 대안 인 정규 표현식을 만들고 (예 one|two🙂 일치하는 항목이 있는지 테스트하지만 하위 문자열 중 하나에 특수 문자가 포함되어 있는지 테스트 정규식 ( *, [등)에서는 먼저 탈출해야하며 대신 지루한 루프를 수행하는 것이 좋습니다.

라이브 예 :


이 질문에 대한 의견에서 MartinArray.prototype.mapECMAScript5 의 새로운 방법에 대해 묻습니다 . map그다지 도움이되지는 않지만 다음 some과 같습니다.

if (substrings.some(function(v) { return str.indexOf(v) >= 0; })) {
    // There's at least one
}

라이브 예 :

ECMAScript5 호환 구현에서만 사용할 수 있지만 polyfill에는 쉽지 않습니다.


2020 년 업데이트 : some화살표 기능 (ES2015 +)으로 예제가 더 간단 할 수 있으며 다음 includes대신에 사용할 수 있습니다 indexOf.

if (substrings.some(v => str.includes(v))) {
    // There's at least one
}

라이브 예 :

bind나에게 화살표 기능을 훨씬 더 읽을 수 있지만 그것을 던지 십시오.

if (substrings.some(str.includes.bind(str))) {
    // There's at least one
}

라이브 예 :


답변

var yourstring = 'tasty food'; // the string to check against


var substrings = ['foo','bar'],
    length = substrings.length;
while(length--) {
   if (yourstring.indexOf(substrings[length])!=-1) {
       // one of the substrings is in yourstring
   }
}


답변

한 줄 솔루션

substringsArray.some(substring=>yourBigString.includes(substring))

true\false부분 문자열 인 경우 반환exists\does'nt exist

ES6 지원 필요


답변

function containsAny(str, substrings) {
    for (var i = 0; i != substrings.length; i++) {
       var substring = substrings[i];
       if (str.indexOf(substring) != - 1) {
         return substring;
       }
    }
    return null;
}

var result = containsAny("defg", ["ab", "cd", "ef"]);
console.log("String was found in substring " + result);


답변

인터넷 검색을하는 사람들에게

확실한 대답이되어야합니다.

const substrings = ['connect', 'ready'];
const str = 'disconnect';
if (substrings.some(v => str === v)) {
   // Will only return when the `str` is included in the `substrings`
}


답변

var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = 0, len = arr.length; i < len; ++i) {
    if (str.indexOf(arr[i]) != -1) {
        // str contains arr[i]
    }
}

편집 : 테스트 순서가 중요하지 않으면 루프 변수를 하나만 사용하여 이것을 사용할 수 있습니다.

var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = arr.length - 1; i >= 0; --i) {
    if (str.indexOf(arr[i]) != -1) {
        // str contains arr[i]
    }
}


답변

배열이 크지 않으면을 사용하여 개별적으로 각 하위 문자열에 대해 문자열을 반복 확인 할 수 있습니다 indexOf(). 또는 대안으로 하위 문자열을 사용하여 정규 표현식을 작성할 수 있습니다.