【问题标题】:How to regex replace a query string with matching 2 words?如何正则表达式用匹配的 2 个单词替换查询字符串?
【发布时间】:2022-01-15 03:57:12
【问题描述】:

我有一个 url,我想替换查询字符串。例如

www.test.com/is/images/383773?wid=200&hei=200

我想匹配 wid=hei= 并且数字不必是 200 来替换整个东西,所以它应该看起来像这样。

预期 www.test.com/is/images/383773?@HT_dtImage

所以我尝试过,但它只替换了匹配的 weihei

const url = "www.test.com/is/images/383773?wid=200&hei=200"

url.replace(/(wid)(hei)_[^\&]+/, "@HT_dtImage")

【问题讨论】:

标签: javascript regex


【解决方案1】:

您可以匹配 wid= 或 hei= 直到下一个可选的 & 符号,然后删除这些匹配项,然后将 @HT_dtImage 附加到结果中。

\b(?:wid|hei)=[^&]*&?

模式匹配:

  • \b防止部分单词匹配的单词边界
  • (?:wid|hei)= 非捕获组,匹配 widhei 后跟 =
  • [^&]*&? 匹配除& 以外的字符0+ 次,然后匹配可选的&

查看regex demo

let url = "www.test.com/is/images/383773?wid=200&hei=200"
url = url.replace(/\b(?:wid|hei)=[^&]*&?/g, "") + "@HT_dtImage";
console.log(url)

【讨论】:

    【解决方案2】:

    我会在这里使用字符串拆分:

    var url = "www.test.com/is/images/383773?wid=200&hei=200";
    var output = url.split("?")[0] + "?@HT_dtImage";
    console.log(output);

    如果您只想定位具有两个键 widhei 的查询字符串,则使用正则表达式方法:

    var url = "www.test.com/is/images/383773?wid=200&hei=200";
    var output = url.replace(/(.*)\?(?=.*\bwid=\d+)(?=.*\bhei=\d+).*/, "$1?@HT_dtImage");
    console.log(output);

    【讨论】:

      【解决方案3】:

      您可以使用正则表达式 /\?.*/ 使用环视

      const url = 'www.test.com/is/images/383773?wid=200&hei=200';
      
      const result = url.replace(/\?.*/, '?@HT_dtImage');
      console.log(result);

      【讨论】:

        【解决方案4】:

        试试 url.replace(/\?.*/, "?@HT_dtImage")

        【讨论】:

        • 如果你能解释它的作用和原因会有所帮助
        • \?.* = 选择从问号到行尾的所有内容,然后将其替换为 ?@HT_dtImage
        猜你喜欢
        • 1970-01-01
        • 2015-11-30
        • 2021-05-23
        • 2017-08-28
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 2012-01-25
        • 2016-12-03
        相关资源
        最近更新 更多