Yani mesela:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Ama bu elbette çalışmıyor :) Bunu yapmanın bir yolu var mı?
Yani mesela:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Ama bu elbette çalışmıyor :) Bunu yapmanın bir yolu var mı?
Yanıtlar:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Bazı yorumlar Başına, bu isteyebilirsiniz nota önemlidir kaçmak değişkeni (örneğin değişken kullanıcı girişi geliyor) zararlı içerik potansiyel varsa
2019'da bu genellikle bir şablon dizesi kullanılarak yazılır ve yukarıdaki kod güncellendi. Orijinal cevap:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
ifade
/\w+\//i
olurnew RegExp("\\w+/", "i")
RegExp nesnesini kullanabilirsiniz:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
O zaman istediğiniz şekilde inşa edebilirsiniz regexstring
.
Burada daha fazla bilgi edinebilirsiniz .
JavaScript'te bir değişkenden normal bir ifade oluşturmak için yapıcıyı RegExp
bir string parametresiyle kullanmanız gerekir .
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
Tabii ki, bu çok naif bir örnek. input
Düzenli bir ifade için düzgün bir şekilde kaçıldığını varsayar . Kullanıcı girişi ile uğraşıyorsanız veya sadece özel karakterlerle eşleşmeyi daha uygun hale getirmek istiyorsanız, özel karakterlerden kaçmanız gerekir :
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
metni silmemdi. Bu yüzden kullandım:return new RegExp(input, flags);
es6 şablon değişmezlerini kullanıyorsanız bir seçenektir ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); export const validatePassword = value => value.match (newRegExp); ``
Her zaman dize olarak normal ifade verebilirsiniz, ör. "ReGeX" + testVar + "ReGeX"
. Muhtemelen dizenizdeki bazı karakterlerden (örneğin çift tırnak) kaçmak zorunda kalacaksınız, ancak çoğu durumda eşdeğerdir.
Ayrıca RegExp
yapıcıları bayrakları aktarmak için de kullanabilirsiniz ( belgelere bakın ).
JS'de iki yoldan biriyle normal ifadeler oluşturabilirsiniz:
/ab{2}/g
new RegExp("ab{2}", "g")
.Normal ifade değişmez değerleri sabittir ve değişkenlerle kullanılamaz. Bu, yapıcı kullanılarak gerçekleştirilebilir. RegEx yapıcısının yapısı
new RegExp(regularExpressionString, modifiersString)
Değişkenleri regularExpressionString öğesinin parçası olarak gömebilirsiniz. Örneğin,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Bu, desenin herhangi bir görünümü ile eşleşecektir cdcdcd
.
İşte belirli karakterler tarafından sarılmış değerleri döndüren oldukça işe yaramaz bir işlev. :)
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)
kabul edilen cevap benim için çalışmıyor ve MDN örneklerine uymuyor
yukarıdaki bağlantıdaki 'Açıklama' bölümüne bakın
Benim için çalışan aşağıdakilerle giderdim:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Yalnızca önce string değişkenini hazırlamak ve daha sonra RegEx'e dönüştürmek gerekir.
Örneğin:
Eklemek istediğiniz minLength
ve MaxLength
RegEx'in için değişken ile:
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
}
şimdi MaxLength
veya değerini MinLength
değiştirirseniz, tüm RegEx'lerde değişecektir.
Yararlı olmayı umuyoruz. İngilizcem için de üzgünüm.