我需要使用通配符正则表达式过滤字符串数组:
// 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']
那么如何修复正则表达式呢?
答案 0 :(得分:5)
如果您想使用正则表达式执行此操作,请执行以下操作:
var regex = new RegExp(keyword);
// if you want it case-insensitive:
var regex = new RegExp(keyword, 'i');
如果关键字包含任何特定于正则表达式的字符,例如[
或*
,则会中断此操作。如果这对你来说是个问题,你需要编写一个函数来逃避这些字符。
但是,通过使用strings[i].indexOf(keyword) != -1
来测试关键字是否在字符串中,您可以更轻松地解决问题 - 根本不使用正则表达式。
答案 1 :(得分:0)
不太清楚你到底想要做什么。 Javascript确实有文字RE,所以你可以这样做:
var regex = /foo/;
这是一种更好的做法:
var regex = new RegExp( 'foo' );
(但在第二种情况下,'foo'可能是传入的字符串参数。
正则表达式上不需要任何前导/尾随通配符。