如何在JavaScript中将正则表达式替换为字符串中的模式

时间:2013-06-04 23:22:31

标签: javascript regex

我有这个字符串: 我要转换为http://zrack-profile-a.comaihd.net/foobar.jpg http://z-r.ac.zrack.net/profile.ac/foobar.jpg

首先,我检查字符串输入是否与正则表达式匹配:

regex = "^(https?)://(?!z-[mn])(zrack)([0-9a-zA-Z.-]+)(-a.comaihd).net(:?[0-9]{0,5})"

代码:input.match(regex)返回true。所以现在我需要用另一种模式替换这个正则表达式。

pattern = "$1://z-r.ac.zrack.net$5/$3.ac$6"

然后我做inputNew = input.replace(regex, pattern)。但是这根本不会改变inputNew; inputNew ==输入。我究竟做错了什么?此外,输入字符串可以是各种各样的东西,这就是为什么我的正则表达式对于提供的上述输入字符串所需的更复杂。

以下在PHP中完美运行。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

你需要这样做:

input = input.replace(regex, pattern);

String#replace(...)仅执行替换并返回 String实例;它不会修改原始字符串。

修改

也许这可能与您如何定义正则表达式有关?它必须是由/而不是"限定的文字:

regex = /^(https?):\/\/(?!z-[mn])(zrack)([0-9a-zA-Z.-]+)(-a.comaihd).net(:?[0-9]{0,5})/;

您还可以使用RegExp对象:

var regex = new RegExp("^(https?)://(?!z-[mn])(zrack)([0-9a-zA-Z.-]+)(-a.comaihd).net(:?[0-9]{0,5})");

答案 1 :(得分:0)

regex需要是正则表达式文字

regex = /^(https?):\/\/(?!z-[mn])(zrack)([0-9a-zA-Z.-]+)(-a.comaihd).net(:?[0-9]{0,5})/

或者您需要创建一个新的RegExp对象

inputNew = input.replace(new RegExp(regex), pattern);

您可能希望使其不区分大小写。

此外,您发布的正则表达式返回http://z-r.ac.zrack.net/-profile.ac$6/foobar.jpg,而不是http://z-r.ac.zrack.net/profile.ac/foobar.jpg

修改:修正拼写错误。