1

ワイルドカード正規表現を使用して文字列の配列をフィルタリングする必要があります。

// my search key
var myKeyword = 'bar';

// my search list
var strings = ['foo', 'bar', 'foobar', 'barfoo', 'hello', 'java', 'script', 'javascript'];

// my results
var results = [];

// the regexp, I don't understand
var regex = new RegExp(\*/, myKeyword);

// the for loop
for (var i = 0; i < strings.length; i++) {
    if (regex.test(strings[i]) {
        results.push(strings[i]);
    }
}

console.log(results); // prints ['bar', 'foobar', 'barfoo']

では、正規表現を修正するにはどうすればよいですか?

4

2 に答える 2

5

正規表現でやりたい場合は、次のようにします。

var regex = new RegExp(keyword);
// if you want it case-insensitive:
var regex = new RegExp(keyword, 'i');

[キーワードにやなどの正規表現固有の文字が含まれていると、これは壊れます*。問題がある場合は、これらの文字をエスケープする関数を作成する必要があります。

strings[i].indexOf(keyword) != -1ただし、正規表現をまったく使用せずに、キーワードが文字列内にあるかどうかをテストするために使用することで、問題をより簡単に解決できます。

于 2012-07-23T12:29:37.527 に答える
0

ここで何をしようとしているのかよくわかりません。Javascriptには文字通りのREがあるので、次のことができます。

var regex = /foo/;

これは、より良い方法です。

var regex = new RegExp( 'foo' );

(ただし、2番目のケースでは、「foo」は渡される文字列引数である可能性があります。

正規表現に先頭/末尾のワイルドカードは必要ありません。

于 2012-07-23T12:33:54.077 に答える