我有这个字符串: 我要转换为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中完美运行。
任何帮助将不胜感激。谢谢!
答案 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
。
修改:修正拼写错误。