63

JavaScriptで、正規表現の配列に対する文字列の一致のブール値を取得する方法はありますか?

例は次のようになります(「if」ステートメントが私が達成しようとしていることを表している場合):

var thisExpressions = [ '/something/', '/something_else/', '/and_something_else/'];
var thisString = 'else';

if (matchInArray(thisString, thisExpressions)) {

} 
4

9 に答える 9

112

より機能的なアプローチを使用すると、配列関数を使用してワンライナーで一致を実装できます。

ECMAScript 6:

const regexList = [/apple/, /pear/];
const text = "banana pear";
const isMatch = regexList.some(rx => rx.test(text));

ECMAScript 5:

var regexList = [/apple/, /pear/];
var text = "banana pear";
var isMatch = regexList.some(function(rx) { return rx.test(text); });
于 2016-06-28T11:50:21.457 に答える
21

http://jsfiddle.net/9nyhh/1/

var thisExpressions = [/something/, /something_else/, /and_something_else/];
var thisExpressions2 = [/else/, /something_else/, /and_something_else/];
var thisString = 'else';

function matchInArray(string, expressions) {

    var len = expressions.length,
        i = 0;

    for (; i < len; i++) {
        if (string.match(expressions[i])) {
            return true;
        }
    }

    return false;

};

setTimeout(function() {
    console.log(matchInArray(thisString, thisExpressions));
    console.log(matchInArray(thisString, thisExpressions2));
}, 200)​
于 2012-04-14T10:00:23.697 に答える
6

別の文字列で探しているものが見つかったときにブール値を返す.test()を使用できます。

var thisExpressions = [ '/something/', '/something_else/', '/and_something_else/'];
var thisString = new RegExp('\\b' + 'else' + '\\b', 'i');
var FoundIt = thisString.test(thisExpressions);  
if (FoundIt) { /* DO STUFF */ }
于 2012-04-14T12:20:31.847 に答える
1

こっち見て…

function matchInArray(stringSearch, arrayExpressions){
    var position = String(arrayExpressions).search(stringSearch);
    var result = (position > -1) ? true : false
    return result;
}
于 2015-10-14T20:52:53.127 に答える
-2

そこで、リテラル文字列と、調べたい配列を受け取る関数を作成します。見つかった一致を含む新しい配列を返します。この関数内に新しい正規表現オブジェクトを作成し、配列内の各要素に対して String.search を実行します。見つかった場合は、文字列を新しい配列にプッシュして返します。

// literal_string: a regex search, like /thisword/ig
// target_arr: the array you want to search /thisword/ig for.

function arr_grep(literal_string, target_arr) {
  var match_bin = [];
  // o_regex: a new regex object.
  var o_regex = new RegExp(literal_string);
  for (var i = 0; i < target_arr.length; i++) {
    //loop through array. regex search each element.
    var test = String(target_arr[i]).search(o_regex);
    if (test > -1) {
    // if found push the element@index into our matchbin.
    match_bin.push(target_arr[i]);
    }
  }
  return match_bin;
}

// arr_grep(/.*this_word.*/ig, someArray)
于 2016-05-06T11:26:55.873 に答える