Как добавить зацикленное значение внутри string.match? - PullRequest
0 голосов
/ 17 сентября 2018

Как перебрать строку и добавить ее значение в регулярное выражение в методе match. Я получаю ноль. Пробовал с /'str[i]'/g и он также дает ноль.

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(/str[i]/g); //gives null
};

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Вам необходимо использовать конструктор new RegExp() , чтобы вы могли динамически создавать регулярные выражения с повторяющимися string:

str.match(new RegExp(str[i],'g'))

Но если вы пытаетесь получить array совпадений для каждой буквы в string, вам нужно push массив matches в вашем regResult, а не просто переопределять его значение на каждой итерации :

regResult.push(str.match(new RegExp(str[i], 'g'))); //gives null

Демо-версия:

var str = "helloWorld";
var regResult = [];

for (var i = 0; i < str.length; i++) {
  regResult.push(str.match(new RegExp(str[i], 'g'))); //gives null
};
console.log(regResult);
0 голосов
/ 17 сентября 2018

Возможно, вам нужно немного исправить

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
    regResult = str.match(new RegExp(str[i], 'g'));
    console.log(regResult)
};
0 голосов
/ 17 сентября 2018
// static RegExp -> /str[i]/g is just equal "str[i]"
// dynamic RegExp -> new RegExp(str[i], "g") is str[i] h,e,l,l, ...

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(new RegExp(str[i], "g")); //gives null
  console.log(regResult);
};
0 голосов
/ 17 сентября 2018

Прямо сейчас ваше регулярное выражение соответствует str, за которым следует один символ из диапазона i - один i, что означает, что оно будет соответствовать stri.Чтобы сопоставить переменную i, попробуйте следующее:

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(new RegExp('str' + i, 'g')); //gives null
};

Здесь мы создаем регулярное выражение, шаблон которого содержит текущее значение переменной i.Например, если i равно 4, то регулярное выражение будет построено так, как если бы вы просто указали /str4/g на str.match.

РЕДАКТИРОВАТЬ

Чтобы отразить изменения, внесенные ввопрос, мое новое предлагаемое решение заключается в следующем:

var str = "helloWorld";
var regResult;

for (var i = 0; i < str.length; i++) {
  regResult = str.match(new RegExp(str[i], 'g')); //gives null
};

Этот код отличается от приведенного выше кода тем, что он читает значение i из str.Например, если i равно 4 и str[4] = "h", регулярное выражение будет сконструировано так, как если бы вы просто указали значение от str[4] до str.match: str.match(/h/g).

...