【问题标题】:Regex - Replace part of url正则表达式 - 替换部分网址
【发布时间】:2021-11-07 00:56:44
【问题描述】:

我想替换一部分url:

Origin-> https://example.u-test.com/ex-2<br>


Destination-> https://example.u-test.com/ex <br>

所以我想要的是删除“-”之后的部分,但只删除第一个斜线之后的第二部分。

url.replace(/ *\-[^.]*\. */g, ".") 我得到:

https://example.u.com/ex-2

我想删除 ex 后的“-2”,而不是第一部分中的“-test”。

什么是正确的正则表达式?

【问题讨论】:

  • 显示代码以便我们提供帮助
  • 为什么是正则表达式?为什么不.split()
  • 您只需要 regx 中的答案吗?
  • 我会说从 url 构建一个 URL 对象,然后对 pathname 属性而不是整个 url 进行操作

标签: javascript regex redirect


【解决方案1】:

如果你绝对想用正则表达式来做到这一点:

const url = "https://example.u-test.com/ex-2"
const result = url.replace(/-[^-]*$/g, "")
console.log(result)

解释: 如果您想删除最后一个斜线或破折号之后的部分,您应该从该点开始匹配。上面的正则表达式从行中的最后一个破折号 (-) 字符开始匹配。正则表达式将只匹配最后一个破折号,因为它搜索的后续字符是除了另一个破折号之外的所有字符,然后是行尾 ($)。

  • - 匹配破折号 (-) 字符
  • [^-]* 匹配除另一个破折号之外的所有内容
  • $ 在破折号和非破折号后,必须有行尾

【讨论】:

  • [A-z] 包括A-Za-z 以及[\]&amp;_ 和反引号,但不包括许多其他内容,例如!"#$%&amp;'()*+, 等或常见的重音字符。如果您的意思是 ascii 字母数字,您应该使用[A-Za-z][A-Z]/gi,或者如果您的意思是“除了另一个破折号之外的所有内容”,您应该使用[^-][A-z] 是一种反模式(不是双关语)。您也不需要转义初始破折号\-- 相同。
  • 不知道 [A-z] 是反模式。感谢您的澄清!我已经更新了答案。
【解决方案2】:

您可以为此使用URL 接口。它允许您轻松读取和修改给定 URL 的不同组成部分。

const url =  new URL("https://example.u-test.com/ex-2");

const domain = url.hostname;
const pathname = url.pathname;
const part = pathname.split("-")[0];

console.log(domain + part);

【讨论】:

  • 您不需要取出 URL 对象的不同部分,您只需将 .pathname 属性设置为新值并将 toString() 设置为实例,或将 .href 属性设置为取回新的 url 字符串
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多