0

我有这个字符串: http://zrack-profile-a.comaihd.net/foobar.jpg我想将其转换为 http://zr.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;输入新 == 输入。我究竟做错了什么?输入字符串也可以是各种各样的东西,这就是为什么我的正则表达式比上面提供的输入字符串更复杂的原因。

以下在 PHP 中完美运行。

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

4

2 回答 2

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})");
于 2013-06-04T23:23:35.827 回答
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.

编辑:修复错字。

于 2013-06-04T23:48:59.793 回答