javascript RexEx с переменной, не дающей желаемого результата

1

Я пытаюсь обновить проект, который определяет значение, такое как ts-english, ts-german, ts-italian, используя регулярное выражение. этот код производит

var str = "ts-english";
let patt = /(?<=ts\-)\S+/i;
var res = patt.exec(str);
console.log (res)

output: ['english', index: 3, input: 'ts-english', groups: undefined]

Я хочу иметь возможность сделать что-то для ts-1-english в цикле for. Я понимаю, что я должен использовать RegEx для установки переменной во время каждой итерации цикла.

var str = "ts-1-english";
for (q=1; q <= 3; q++){
    var mpatt = new RegExp ("/(?<=ts\\-" + q + "\\-)\\S+/i")
    console.log (mpatt)
    var res = mpatt.exec(str);
    console.log ("q: " + (q) + " result of test: " + res)
}

это мой вывод.

//(? <= ts-1 -)\S+/i/q: 1 результат теста: null

//(? <= ts-2 -)\S+/i/q: 2 результат теста: null

//(? <= ts-3 -)\S+/i/q: 3 результат теста: null

Теги:
variables

1 ответ

0

Проблема с вашим кодом заключается в том, что при использовании new RegExp вы должны передать простое регулярное выражение, которое вы хотите построить, без / разделителей и без флагов. Чтобы использовать флаги, передайте их во втором аргументе, например:

new RegExp ("(?<=ts\\-" + q + "\\-)\\S+", 'i');

Но гораздо проще использовать литералы регулярных выражений, когда это возможно; вам не нужно дважды избегать обратных косых черт, среди прочего. И в этом случае это возможно. Вместо использования цикла вы можете вместо этого использовать набор символов, который соответствует 1, 2 или 3 в нужной точке, с [1-3]:

const str = "ts-1-english";
const mpatt = /(?<=ts-[1-3]-)\S+/i;
const res = mpatt.exec(str);
console.log(res)

Также обратите внимание, что lookbehind в Javascript не поддерживается широко; вы можете подумать об использовании группы для части, которую вы хотите извлечь:

const str = "ts-1-english";
const mpatt = /ts-[1-3]-(\S+)/i;
const res = mpatt.exec(str);
console.log(res);
  • 0
    Ах понятно. Я включил флаг "i" в RegEx вместо того, чтобы передавать его как переменную.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню