RegExpr и переменная

У меня есть только один вопрос, может глупый (как каждый день)

var word = []; (an array with 100 words for example)
var tab = []; // resultat
var root = "test";
var debut = "Anti";
var reg1=new RegExp("^"+debut + "+." + root,"g")
    for(var i = 0;i<word.length; i++){ 
 // a word begin with Anti and contain test pls
        if (word[i].match(reg1)){´
            tab.push(word[i])
        }
}
    console.log(tab.join(', ');

но это не работает, я не знаю, как использовать переменную с regexpr, спасибо, извините за мой английский


person Macasun    schedule 09.07.2016    source источник
comment
Вы хотите получить слова из массива word, которые начинаются с «тест», а также содержат «анти», в массив tab?   -  person David says reinstate Monica    schedule 09.07.2016
comment
Можете ли вы уточнить, почему ваш код не работает? Чего вы ожидали и что произошло на самом деле? Если вы получили исключение/ошибку, опубликуйте строку, в которой это произошло, и сведения об исключении/ошибке. Пожалуйста, измените эти данные, иначе мы не сможем помочь.   -  person Isiah Meadows    schedule 09.07.2016
comment
Регулярное выражение будет выглядеть как /^Anti+.test/g, вы пробовали это напрямую, без переменных, и тогда это работает?   -  person adeneo    schedule 09.07.2016
comment
+., вероятно, должно быть .+.   -  person Barmar    schedule 09.07.2016


Ответы (3)


Вот код, но используется test() вместо match()

 var word=["yea","antiboyahtest","antigssjshbztest"];
var debut="anti";
var root="test";
var reg=new RegExp("^"+debut+".*"+root,"g");
var tabs=[];
for(i in word){
 if(reg.test(word[i])){
  tabs.push(word[i]);
 }
}
alert(tabs);
person Shrikanth Buds    schedule 09.07.2016

Решение с использованием функций RegExp.test и Array.filter:

var word = ['Antitest', 'Antidot', 'Anti-next-test', 'testAnti'],
    root = "test", debut = "Anti",
    reg1 = new RegExp("^"+debut + ".*?" + root, "g");

var result = word.filter(function (w) {
    return reg1.test(w);
});

console.log(result);  // ["Antitest", "Anti-next-test"]

Кроме того, есть дополнительный подход с использованием функции Array.indexOf без какого-либо регулярного выражения, который даст тот же результат:

...
var result = word.filter(function (w) {
    return w.indexOf(debut) === 0 && w.indexOf(root) !== -1;
});
person RomanPerekhrest    schedule 09.07.2016

person    schedule
comment
Спасибо Бен Астон!! - person Macasun; 09.07.2016