Ví dụ:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Nhưng điều này tất nhiên là không hoạt động :) Có cách nào để làm điều này?
Ví dụ:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
Nhưng điều này tất nhiên là không hoạt động :) Có cách nào để làm điều này?
Câu trả lời:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
Mỗi một số ý kiến, điều quan trọng cần lưu ý là bạn có thể muốn thoát khỏi các biến nếu có tiềm năng cho các nội dung độc hại (ví dụ như biến xuất phát từ người dùng nhập vào)
Năm 2019, điều này thường sẽ được viết bằng chuỗi mẫu và mã trên đã được cập nhật. Câu trả lời ban đầu là:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
regex
biểu
/\w+\//i
trở thànhnew RegExp("\\w+/", "i")
Bạn có thể sử dụng đối tượng RegExp:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
Sau đó, bạn có thể xây dựng regexstring
theo bất kỳ cách nào bạn muốn.
Bạn có thể đọc thêm về nó ở đây .
Để tạo biểu thức chính quy từ một biến trong JavaScript, bạn sẽ cần sử dụng hàm RegExp
tạo với tham số chuỗi.
function reg(input) {
var flags;
//could be any combination of 'g', 'i', and 'm'
flags = 'g';
return new RegExp('ReGeX' + input + 'ReGeX', flags);
}
Tất nhiên, đây là một ví dụ rất ngây thơ. Nó giả định rằng input
đã được thoát đúng cho một biểu thức chính quy. Nếu bạn đang xử lý đầu vào của người dùng hoặc chỉ đơn giản là muốn thuận tiện hơn để khớp các ký tự đặc biệt, bạn sẽ cần phải thoát các ký tự đặc biệt :
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
văn bản. Vì vậy, tôi đã sử dụng:return new RegExp(input, flags);
nếu bạn đang sử dụng mẫu chữ es6 là một tùy chọn ...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
^[^\s]{${4},${32}}$
); xuất const constateatePassword = value => value.match (newRegExp); `` `
Bạn luôn có thể đưa ra biểu thức chính quy dưới dạng chuỗi, tức là "ReGeX" + testVar + "ReGeX"
. Bạn có thể phải thoát một số ký tự bên trong chuỗi của mình (ví dụ: trích dẫn kép), nhưng đối với hầu hết các trường hợp, nó tương đương.
Bạn cũng có thể sử dụng hàm RegExp
tạo để truyền cờ trong ( xem tài liệu ).
Bạn có thể tạo các biểu thức chính quy trong JS theo một trong hai cách:
/ab{2}/g
new RegExp("ab{2}", "g")
.Chữ biểu thức chính quy là hằng số và không thể được sử dụng với các biến. Điều này có thể đạt được bằng cách sử dụng các nhà xây dựng. Cấu trúc của hàm tạo RegEx là
new RegExp(regularExpressionString, modifiersString)
Bạn có thể nhúng các biến như một phần của normalExpressionString. Ví dụ,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
Điều này sẽ phù hợp với bất kỳ sự xuất hiện của các mẫu cdcdcd
.
Đây là một hàm khá vô dụng trả về các giá trị được bao bọc bởi các ký tự cụ thể. :)
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)
câu trả lời được chấp nhận không hoạt động đối với tôi và không tuân theo các ví dụ MDN
xem phần 'Mô tả' trong liên kết ở trên
Tôi sẽ làm theo những điều sau đây cho tôi:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
Trước tiên, chỉ cần chuẩn bị biến chuỗi, sau đó chuyển đổi nó thành RegEx.
ví dụ:
Bạn muốn thêm minLength
và MaxLength
với biến vào 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
}
bây giờ nếu bạn thay đổi giá trị của MaxLength
hoặc MinLength
, Nó sẽ thay đổi trong tất cả các RegEx.
Hy vọng sẽ hữu ích. Cũng xin lỗi về tiếng Anh của tôi.