要从字符串创建正则表达式,必须使用 JavaScript 的正则表达式
对象。
如果还想多次匹配/替换,则必须添加 g
(全局匹配)标志。下面是一个示例:
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演示在这里。
在一般情况下,在用作正则表达式之前对字符串进行转义:
但是,并非每个字符串都是有效的正则表达式:有一些特殊字符,如 或 。要变通解决此问题,只需在将其转换为正则表达式之前转义字符串。下面的示例中提供了一个实用程序函数:(
[
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演示在这里。
注意:问题中的正则表达式使用修饰符,该修饰符在问题提出时并不存在,但今天确实存在 - JavaScript中的s
(dotall)标志/修饰符。s