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

如果关键字包含任何特定于正则表达式的字符,例如[or ,这将中断*。如果这对您来说是个问题,您需要编写一个函数来转义这些字符。

strings[i].indexOf(keyword) != -1但是,您可以通过使用来测试关键字是否在字符串中更容易解决您的问题- 根本不使用正则表达式。

于 2012-07-23T12:29:37.527 回答
0

不太清楚你到底想在这里做什么。Javascript 确实有文字 RE,所以你可以这样做:

var regex = /foo/;

这只是一种更好的做法:

var regex = new RegExp( 'foo' );

(但在第二种情况下,“foo”可能是传入的字符串参数。

您不需要正则表达式上的任何前导/尾随通配符。

于 2012-07-23T12:33:54.077 回答