Also zum Beispiel:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Aber das funktioniert natürlich nicht :) Gibt es eine Möglichkeit, dies zu tun?
Also zum Beispiel:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Aber das funktioniert natürlich nicht :) Gibt es eine Möglichkeit, dies zu tun?
Antworten:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Per einige der Kommentare, ist es wichtig zu beachten , dass Sie möchten entkommen die Variable , wenn es auf schädliche Inhalte (zB die Variable kommt von Benutzereingaben) Potential
Im Jahr 2019 wird dies normalerweise mit einer Vorlagenzeichenfolge geschrieben, und der obige Code wurde aktualisiert. Die ursprüngliche Antwort war:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
Ausdruck
/\w+\//i
wirdnew RegExp("\\w+/", "i")
Sie können das RegExp-Objekt verwenden:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Dann können Sie konstruieren regexstring
.
Sie können mehr darüber lesen Sie hier .
Um einen regulären Ausdruck aus einer Variablen in JavaScript zu erstellen, müssen Sie den RegExp
Konstruktor mit einem Zeichenfolgenparameter verwenden.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
Dies ist natürlich ein sehr naives Beispiel. Es wird davon ausgegangen, dass input
es für einen regulären Ausdruck ordnungsgemäß maskiert wurde. Wenn Sie sich mit Benutzereingaben befassen oder einfach das Abgleichen von Sonderzeichen vereinfachen möchten, müssen Sie Sonderzeichen umgehen :
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);
}
ReGeX
Text gelöscht habe . Also habe ich verwendet:return new RegExp(input, flags);
wenn Sie es6 verwenden Vorlagenliterale verwenden, sind diese eine Option ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); export const validatePassword = value => value.match (newRegExp); `` `
Sie können einen regulären Ausdruck immer als Zeichenfolge angeben, d. H. "ReGeX" + testVar + "ReGeX"
.Möglicherweise müssen Sie einige Zeichen in Ihrer Zeichenfolge maskieren (z. B. doppelte Anführungszeichen), aber in den meisten Fällen ist dies gleichwertig.
Sie können den RegExp
Konstruktor auch zum Übergeben von Flags verwenden ( siehe Dokumentation ).
Sie können reguläre Ausdrücke in JS auf zwei Arten erstellen:
/ab{2}/g
new RegExp("ab{2}", "g")
.Literale für reguläre Ausdrücke sind konstant und können nicht mit Variablen verwendet werden. Dies könnte mit dem Konstruktor erreicht werden. Die Struktur des RegEx-Konstruktors ist
new RegExp(regularExpressionString, modifiersString)
Sie können Variablen als Teil des regulären Ausdrucks einbetten. Beispielsweise,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Dies passt zu jedem Erscheinungsbild des Musters cdcdcd
.
Hier ist eine ziemlich nutzlose Funktion, die Werte zurückgibt, die von bestimmten Zeichen umbrochen werden. :) :)
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)
akzeptierte Antwort funktioniert bei mir nicht und folgt nicht MDN-Beispielen
Siehe den Abschnitt 'Beschreibung' im obigen Link
Ich würde mit folgendem gehen, es funktioniert für mich:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Es ist nur erforderlich, zuerst die Zeichenfolgenvariable vorzubereiten und sie dann in RegEx zu konvertieren.
beispielsweise:
Sie hinzufügen möchten minLength
und MaxLength
mit den Variablen zu 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
}
jetzt, wenn Sie den Wert von MaxLength
oder ändernMinLength
ändern, ändert sich dies in allen RegExs.
Ich hoffe, nützlich zu sein. Tut mir auch leid wegen meinem Englisch.