Quindi per esempio:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Ma questo ovviamente non funziona :) C'è un modo per farlo?
Quindi per esempio:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Ma questo ovviamente non funziona :) C'è un modo per farlo?
Risposte:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Per alcuni dei commenti, è importante notare che potresti voler sfuggire alla variabile in caso di potenziale contenuto dannoso (ad es. La variabile proviene dall'input dell'utente)
Nel 2019, questo sarebbe di solito scritto usando una stringa di modello e il codice sopra è stato aggiornato. La risposta originale era:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regexespressione
/\w+\//idiventanew RegExp("\\w+/", "i")
È possibile utilizzare l'oggetto RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Quindi puoi costruire regexstringnel modo che preferisci.
Puoi leggere di più qui .
Per creare un'espressione regolare da una variabile in JavaScript, dovrai utilizzare il RegExpcostruttore con un parametro stringa.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
ovviamente, questo è un esempio molto ingenuo. Presuppone che inputsia stato correttamente evaso per un'espressione regolare. Se hai a che fare con l'input dell'utente o vuoi semplicemente rendere più comodo l'abbinamento di caratteri speciali, dovrai scappare da caratteri speciali :
function regexEscape(str) {
return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')
}
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
input = regexEscape(input);
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
ReGeXtesto. Quindi ho usato:return new RegExp(input, flags);
se stai usando i template letterali es6 sono un'opzione ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$); export const validatePassword = value => value.match (newRegExp); ``
Puoi sempre dare un'espressione regolare come stringa, ad es "ReGeX" + testVar + "ReGeX" . Probabilmente dovrai sfuggire ad alcuni caratteri all'interno della tua stringa (ad esempio, virgolette doppie), ma nella maggior parte dei casi è equivalente.
Puoi anche usare la funzione di RegExpcostruzione per passare i flag ( vedi i documenti ).
Puoi creare espressioni regolari in JS in due modi:
/ab{2}/gnew RegExp("ab{2}", "g").I letterali delle espressioni regolari sono costanti e non possono essere utilizzati con le variabili. Ciò potrebbe essere ottenuto utilizzando il costruttore. La struttura del costruttore RegEx è
new RegExp(regularExpressionString, modifiersString)
È possibile incorporare variabili come parte di regularExpressionString. Per esempio,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Ciò corrisponderà a qualsiasi aspetto del motivo cdcdcd.
Ecco una funzione piuttosto inutile che restituisce valori racchiusi da caratteri specifici. :)
jsfiddle: https://jsfiddle.net/squadjot/43agwo6x/
function getValsWrappedIn(str,c1,c2){
var rg = new RegExp("(?<=\\"+c1+")(.*?)(?=\\"+c2+")","g");
return str.match(rg);
}
var exampleStr = "Something (5) or some time (19) or maybe a (thingy)";
var results = getValsWrappedIn(exampleStr,"(",")")
// Will return array ["5","19","thingy"]
console.log(results)
la risposta accettata non funziona per me e non segue esempi di MDN
vedere la sezione "Descrizione" nel link sopra
Vorrei andare con il seguente funziona per me:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
È solo necessario preparare prima la variabile stringa e poi convertirla in RegEx.
per esempio:
Si desidera aggiungere minLengthe MaxLengthcon la variabile a RegEx:
function getRegEx() {
const minLength = "5"; // for exapmle: min is 5
const maxLength = "12"; // for exapmle: man is 12
var regEx = "^.{" + minLength + ","+ maxLength +"}$"; // first we make a String variable of our RegEx
regEx = new RegExp(regEx, "g"); // now we convert it to RegEx
return regEx; // In the end, we return the RegEx
}
ora se cambi il valore di MaxLengtho MinLength, cambierà in tutti i RegEx.
Spero di essere utile. Mi dispiace anche per il mio inglese.