Динамическая генерация Javascript Regexp из переменных?
Как построить два шаблона регулярных выражений в один?
Например, у меня один длинный шаблон и один меньше, мне нужно поставить меньший перед длинным.
var pattern1 = ':\(|:=\(|:-\(';
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\('
str.match('/'+pattern1+'|'+pattern2+'/gi');
Это не работает. Когда я конкатенирую строки, все черты исчезли.
Ответы
Ответ 1
Вы должны использовать RegExp
:
str.match(new RegExp(pattern1+'|'+pattern2, 'gi'));
Когда я конкатенирую строки, все слэши исчезли.
Если у вас есть обратная косая черта в шаблоне, чтобы избежать специального символа регулярного выражения (например, \(
), вы должны использовать два обратную косую черту в строке (потому что \
является символом escape в строке): new RegExp('\\(')
будет таким же, как /\(/
.
Итак, ваши шаблоны должны стать:
var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
Ответ 2
Используйте ниже:
var regEx = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regEx);
Ответ 3
Вам нужно отказаться от литерала регулярного выражения и использовать конструктор объекта, где вы можете передать регулярное выражение в виде строки.
var regex = new RegExp(pattern1+'|'+pattern2, 'gi');
str.match(regex);
Ответ 4
Конструктор RegExp создает объект регулярного выражения для сопоставления текста с шаблоном.
var pattern1 = ':\\(|:=\\(|:-\\(';
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\(';
var regex = new RegExp(pattern1 + '|' + pattern2, 'gi');
str.match(regex);
Над кодом отлично работает для меня...