JavaScript字符串替换与动态正则表达式?

35

我有下面这段代码,它能够工作,但是我需要在运行时向正则表达式对象(regex2)注入一些不同的东西。然而,text.replace似乎不喜欢一个字符串对象用于正则表达式,那么我该如何让它工作呢?

var regex2 = /\|\d+:\d+/;
document.write("result = " + text.replace(regex2, '') + "<br>");

将 stringObj 更改为 String。如果它是字符串,它已经是一个对象 - 即 ATM 机、Pin 号码等。 - mP.
必须在document.write()调用中进行.replace()调用吗?你不能在调用document.write()之前分配那个值吗?看起来这将解决问题(除非我没有正确理解你的问题)。 - brettkelly
我是Alex的同事。stringObj只是为了清楚我们正在做什么,而不是实际的代码。 - Max Schmeling
@inkedmn 不,那样不会有任何区别... 我们仍然无法将一个字符串传递给 replace 方法作为正则表达式。CMS 的答案是正确的,一切都已经处理好了。 - Max Schmeling
4个回答

70

您可以使用RegExp构造函数从字符串中创建一个正则表达式对象:

var regExp = new RegExp(myString);  // regex pattern string

text.replace(regExp, '');

31
需要注意的是:myString 是没有起始和结束标记的正则表达式,即不是 "/foo[123]/",而是 "foo[123]"。 - BlaM

37

CMS的补充:

RegExp构造函数有一个可选的第二个参数flags。
(15.10.4 RegExp构造函数)

var text = "This is a Test.";

var myRegExp = new RegExp('teST','i');

text.replace(myRegExp,'Example');
// -> "This is a Example."

您可以设置以下标志:

  • g -> 全局搜索(所有出现)
  • i -> 不区分大小写
  • m -> 多行

1
你需要动态构建字符串,然后在第二个参数中提供标志。 new RegExp("^"+dynamic+"+|"+dynamic+"+$","g"). - Dhrumil Bhankhar

6
var value = "2012-09-10";
value = value.replace(/([0-9]{4})[\/-]([0-9]{2})[\/-]([0-9]{2})/,"$3/$2/$1");
alert(value);

这将显示

10/09/2012

-5

你可以使用eval来,

new RegExp( eval("/"+str+"/i") );

再见...


3
eval 是不必要的。 - jdhildeb
1
它还会创建两个 RegExp 实例,而实际上只需要一个。 - David Harkness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接