JavaScript-регулярное выражение из строки - PullRequest
55 голосов
/ 02 марта 2011

Я пытаюсь создать что-то похожее на это:

var regexp_loc = /e/i;

, за исключением того, что я хочу, чтобы регулярное выражение зависело от строки, поэтому я попытался использовать новый RegExp, но не смог получить то, что хотел.

В основном я хочу, чтобы e в приведенном выше регулярном выражении было строковой переменной, но у меня не получился синтаксис.

Я пробовал что-то вроде этого:

var keyword = "something";

var test_regexp = new RegExp("/" + keyword + "/i");

В основном я хочу найти подстроку в большей строке, а затем заменить строку другой строкой без учета регистра.

regards, alexander

Ответы [ 6 ]

75 голосов
/ 02 марта 2011

Вам необходимо передать второй параметр :

var r = new RegExp(keyword, "i");

Вам также потребуется экранировать любые специальные символы в строке, чтобы предотвратить атаки с помощью регулярных выражений.

44 голосов
/ 24 мая 2013

Вы также должны помнить, что нужно избегать escape-символов в строке ...

Например, если вы хотите обнаружить одно число \ d {1}, и вы сделали это ...

var pattern = "\d{1}";
var re = new RegExp(pattern);

re.exec("1"); // fail! :(

, который потерпит неудачу, так как начальный символ \ является escape-символом, вам нужно будет "escape-escape", вот так ...

var pattern = "\\d{1}" // <-- spot the extra '\'
var re = new RegExp(pattern);

re.exec("1"); // success! :D
11 голосов
/ 02 марта 2011

При использовании конструктора RegExp слеш не нужен, как при использовании литерала регулярного выражения. Итак:

new RegExp(keyword, "i");

Обратите внимание, что вы передаете флаги во втором параметре. См. здесь для получения дополнительной информации.

1 голос
/ 29 марта 2018

Хочу поделиться примером здесь: Я хочу заменить строку вроде: hi [var1] [var2] на hi [newVar] [var2]. и var1 динамически генерируются на странице.

поэтому мне пришлось использовать: var regex = new RegExp ("\\ [" + var1 + "\\]", 'ig'); mystring.replace (регулярное выражение '[newVar]');

Это работает довольно хорошо для меня. на случай, если кому-то это нужно, как мне. Причина, по которой я должен использовать [], заключается в том, что var1 может быть очень простым шаблоном, добавление [] будет очень точным.

0 голосов
/ 26 августа 2018

Вам нужно преобразовать RegExp , вы можете создать простую функцию, которая сделает это за вас:

function toReg(str) {
  if(!str || typeof str !== "string") {
    return;
  }
  return new RegExp(str, "i");
}

и назовите это как:

toReg("something")
0 голосов
/ 25 июля 2017

var keyword = "что-то";

var test_regexp = new RegExp(something,"i");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...