Javascript Regexp generazione dynamic da variabili?

Come build due schemi regex in uno?

Per esempio, ho uno schema lungo e uno più piccolo, ho bisogno di metterne uno più piccolo di fronte a uno lungo.

var pattern1 = ':\(|:=\(|:-\('; var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\(' str.match('/'+pattern1+'|'+pattern2+'/gi'); 

Questo non funziona. Quando concatenamento di stringhe, tutti i tagli sono spariti.

Devi usare RegExp :

 str.match(new RegExp(pattern1+'|'+pattern2, 'gi')); 

Quando concatenamento di stringhe, tutti i tagli sono spariti.

Se hai una barra rovesciata nel tuo pattern per sfuggire a un carattere regex speciale, (come \( ), devi usare due barre rovesciate nella stringa (perché \ è il carattere di escape in una stringa): new RegExp('\\(') sarebbe uguale a /\(/ .

Quindi i tuoi schemi devono diventare:

 var pattern1 = ':\\(|:=\\(|:-\\('; var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; 

Utilizza il seguente:

 var regEx = new RegExp(pattern1+'|'+pattern2, 'gi'); str.match(regEx); 

Devi rinunciare alla regex literal e usare il costruttore di oggetti, dove puoi passare la regex come una stringa.

 var regex = new RegExp(pattern1+'|'+pattern2, 'gi'); str.match(regex); 

Il costruttore RegExp crea un object espressione regolare per la corrispondenza del testo con un motivo.

  var pattern1 = ':\\(|:=\\(|:-\\('; var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; var regex = new RegExp(pattern1 + '|' + pattern2, 'gi'); str.match(regex); 

Il codice sopra funziona perfettamente per me …