Để tạo regex làm chuỗi, bạn phải sử dụng JavaScript's RegExp
object.
Ngoài ra, bạn có thể muốn khớp/thay thế nhiều lần. Trong trường hợp đó, hãy thêm the g
(global match) flag. Dưới đây là một ví dụ:
var stringToGoIntoTheRegex = "abc";
var regex = new RegExp("#" + stringToGoIntoTheRegex + "#", "g");
// at this point, the line above is the same as: var regex = /#abc#/g;
var input = "Hello this is #abc# some #abc# stuff.";
var output = input.replace(regex, "!!");
alert(output); // Hello this is !! some !! stuff.
JSFiddle demo here.
Trong trường hợp tổng quát, thoát khỏi chuỗi trước khi sử dụng như regex:
Không phải mọi chuỗi là một regex hợp lệ, mặc dù: có một số ký tự đặc biệt, như (
hoặc [
. Để làm việc xung quanh vấn đề này, chỉ cần thoát khỏi chuỗi trước khi biến nó thành một regex. Một chức năng tiện ích cho mà đi trong mẫu dưới đây:
function escapeRegExp(stringToGoIntoTheRegex) {
return stringToGoIntoTheRegex.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
}
var stringToGoIntoTheRegex = escapeRegExp("abc"); // this is the only change from above
var regex = new RegExp("#" + stringToGoIntoTheRegex + "#", "g");
// at this point, the line above is the same as: var regex = /#abc#/g;
var input = "Hello this is #abc# some #abc# stuff.";
var output = input.replace(regex, "!!");
alert(output); // Hello this is !! some !! stuff.
JSFiddle demo here.
Đối với trường hợp cụ thể trong câu hỏi, hãy chú ý there is no s
(dotall) flag/modifier in JavaScript. Trường hợp nó có sẵn, nó thường buộc các dấu chấm (.
) để phù hợp với dòng mới.Dưới đây là một giải pháp khả thi cho trường hợp của bạn:
var str = $("#div").html();
var regexExpression ="(?!(?:[^<]+>|[^>]+<\\/a>))\\b(" + value + ")\\b";
var regex = new RegExp(regexExpression, "i");
$("#div").html(str.replace(regex, "<a href='#" + value +"'>" + value + "</a>"));
Thông báo Tôi đã thêm một thiếu '
vào cuối "<a href='#" + value +"'>"
.
See demo fiddle here. Bạn cũng có thể muốn thử this solution using the "g" modifier.
Giá trị 'có phải là một biến không? – Dogbert