Domanda javascript new regexp da stringa


Sto cercando di creare qualcosa di simile a questo:

var regexp_loc = /e/i;

tranne che voglio che l'espressione regolare dipenda da una stringa, quindi ho provato ad usare il nuovo RegExp ma non ho potuto ottenere quello che volevo.

Fondamentalmente voglio il e nel regexp sopra essere una variabile di stringa, ma non riesco con la sintassi.

Ho provato qualcosa di simile a questo:

var keyword = "something";

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

Fondamentalmente voglio cercare una sottostringa in una stringa più grande, quindi sostituire la stringa con qualche altra stringa, senza distinzione tra maiuscole e minuscole.

Saluti, Alessandro


44
2018-03-02 19:12


origine


risposte:


Devi passare il secondo parametro:

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

Dovrai anche evitare qualsiasi carattere speciale nella stringa per prevenire attacchi di regex injection.


59
2018-03-02 19:14



Dovresti anche ricordare di fare attenzione ai personaggi di fuga all'interno di una stringa ...

Ad esempio se desideri rilevare per un singolo numero \ d {1} e hai fatto questo ...

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

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

che fallirebbe visto che l'iniziale \ è un carattere di escape, avresti bisogno di "sfuggire alla fuga", in questo modo ...

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

re.exec("1"); // success! :D

33
2018-05-24 09:45



Quando si utilizza il costruttore RegExp, non si ha bisogno delle barre come si fa quando si utilizza un valore letterale regexp. Così:

new RegExp(keyword, "i");

Si noti che si passano i flag nel secondo parametro. Vedere Qui per maggiori informazioni.


11
2018-03-02 19:15



Vuoi condividere un esempio qui: Voglio sostituire una stringa come: hi [var1] [var2] a hi [newVar] [var2]. e var1 sono generati dinamicamente nella pagina.

quindi ho dovuto usare: var regex = new RegExp ("\\ [" + var1 + "\\]", 'ig'); mystring.replace (regex, '[newVar]');

Questo funziona abbastanza bene per me. nel caso qualcuno abbia bisogno di questo come me. La ragione per cui devo andare con [] è var1 potrebbe essere un modello molto semplice, aggiungendo [] sarebbe molto accurato.


1
2018-03-29 14:05



var keyword = "something";

var test_regexp = new RegExp(something,"i");

0
2017-07-25 11:05