Jadi misalnya:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Tapi ini tentu saja tidak berhasil :) Apakah ada cara untuk melakukan ini?
Jadi misalnya:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Tapi ini tentu saja tidak berhasil :) Apakah ada cara untuk melakukan ini?
Jawaban:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Per beberapa komentar, penting untuk dicatat bahwa Anda mungkin ingin keluar dari variabel jika ada potensi konten berbahaya (mis. Variabel tersebut berasal dari input pengguna)
Pada 2019, ini biasanya ditulis menggunakan string templat, dan kode di atas telah diperbarui. Jawaban aslinya adalah:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
ekspresi
/\w+\//i
menjadinew RegExp("\\w+/", "i")
Anda dapat menggunakan objek RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Maka Anda dapat membangun regexstring
dengan cara apa pun yang Anda inginkan.
Anda dapat membaca lebih lanjut di sini .
Untuk membangun ekspresi reguler dari variabel dalam JavaScript, Anda harus menggunakan RegExp
konstruktor dengan parameter string.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
tentu saja, ini adalah contoh yang sangat naif. Diasumsikan bahwa input
telah keluar dengan benar untuk ekspresi reguler. Jika Anda berurusan dengan input pengguna, atau hanya ingin membuatnya lebih mudah untuk mencocokkan karakter khusus, Anda harus keluar dari karakter khusus :
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
teks. Jadi saya menggunakan:return new RegExp(input, flags);
jika Anda menggunakan literal template es6 adalah sebuah opsi ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); export const validatePassword = value => value.match (newRegExp); `` `
Anda selalu dapat memberikan ekspresi reguler sebagai string, yaitu "ReGeX" + testVar + "ReGeX"
. Anda mungkin harus melarikan diri beberapa karakter di dalam string Anda (misalnya, kutipan ganda), tetapi untuk sebagian besar kasus itu setara.
Anda juga dapat menggunakan RegExp
konstruktor untuk meneruskan flag ( lihat dokumen ).
Anda dapat membuat ekspresi reguler di JS dalam salah satu dari dua cara:
/ab{2}/g
new RegExp("ab{2}", "g")
.Literal ekspresi reguler adalah konstan, dan tidak dapat digunakan dengan variabel. Ini dapat dicapai dengan menggunakan konstruktor. Struktur konstruktor RegEx adalah
new RegExp(regularExpressionString, modifiersString)
Anda dapat menanamkan variabel sebagai bagian dari regularExpressionString. Sebagai contoh,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Ini akan cocok dengan penampilan pola apa pun cdcdcd
.
Berikut adalah fungsi yang tidak berguna yang mengembalikan nilai yang dibungkus oleh karakter tertentu. :)
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)
jawaban yang diterima tidak bekerja untuk saya dan tidak mengikuti contoh MDN
lihat bagian 'Keterangan' di tautan di atas
Saya akan pergi dengan yang berikut ini bekerja untuk saya:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Ini hanya perlu menyiapkan variabel string terlebih dahulu dan kemudian mengonversinya ke RegEx.
sebagai contoh:
Anda ingin menambahkan minLength
dan MaxLength
dengan variabel ke 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
}
sekarang jika Anda mengubah nilai MaxLength
atau MinLength
, Ini akan berubah di semua RegExs.
Semoga bermanfaat. Maaf tentang bahasa Inggris saya.