2016-03-08 3 views
0

У меня есть строка и шаблон соответствия так:Как построить RegExp из строки

var string = 'stackoverflow Javascript Regex Help';  
var pattern=/(^stackoverflow Javascript)/; 

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

var newString=string.split(pattern+/(.\S*)/); 
alert(newString); //Regex Help 

Но это не работает. Есть ли способ, которым я могу это сделать?

Благодарим вас за помощь.

+1

Чтобы повторно использовать регулярное выражение, вы можете использовать синтаксис конструктора 'RegExp'. – Tushar

+1

* «Я ищу способ повторного использования моего предыдущего шаблона, не переписывая его снова». * - Но почему? Это пахнет совершенно необоснованной преждевременной оптимизацией. – Tomalak

+1

Родственные: [* Как передать переменную в JavaScript с регулярным выражением? *) (Http://stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular- expression-javascript) –

ответ

3

Вы можете использовать RegExp построить регулярное выражение из строки:

var common_pattern = "(^stackoverflow Javascript)"; 
var extra_pattern = "(.\\S*)"; // need to escape the escape character because the pattern is now a string 
var regexp = new RegExp(common_pattern + extra_pattern); 

var newString = string.split(regexp); 
+1

Обратите внимание, что 'common_pattern/pattern' является ** regex ** в Q. и ** string ** здесь. На самом деле это не повторное использование _regex_. – Tushar

+0

@ Марцин, что ты имеешь в виду? Я скопировал ваши регулярные выражения, я не изменил их. – Halcyon

+1

'' (. \ S *) "' становится '" (.S *) ", поэтому это не может быть правильно. Каков ваш ожидаемый результат? – Halcyon

0

Если вы действительно хотите использовать шаблон это может быть сделано с RegExp-х toString.

Se example at JSFiddle here.

Этот пример сначала разбивает строку, используя цифру 1. Затем добавляет цифру 2 к расколу на 12.

Снип:

var newPattern = new RegExp(pattern.toString().slice(1,-1) + '2'); 

С уважением

Edit: Обновлен пример для правильной обработки модификаторов.

+1

NB! Как Halcyon, мне трудно понять, что вы хотите, так что это просто * доказательство концепции *. Это не точный ответ на ваш конкретный пример/проблему. – ClasG

Смежные вопросы