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

How to replace regex to pattern from string in JavaScript

本文关键字:字符串 替换 模式 JavaScript 正则表达式      更新时间:2023-09-26

我有这个字符串: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中可以完美地工作。

任何帮助都会很感激。谢谢!

你需要做的是:

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})");

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);

你可能想让它不区分大小写。

另外,您发布的regex返回http://z-r.ac.zrack.net/-profile.ac$6/foobar.jpg,而不是http://z-r.ac.zrack.net/profile.ac/foobar.jpg

编辑:修正错字