Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用veriable全局替换字符串_Javascript_Node.js_String - Fatal编程技术网

Javascript 使用veriable全局替换字符串

Javascript 使用veriable全局替换字符串,javascript,node.js,string,Javascript,Node.js,String,我试图使用变量全局替换字符串,但在替换时得到意外替换。我搜索了同一个问题,但没有找到任何解决方案,所以我将其发布在这里。也许你们会把我带到犯错误的地方 情况如下: 我有一个HTML邮件正文和一个从邮件正文中提取并存储为数组的链接列表 我正在尝试迭代links数组,并尝试从邮件正文中查找匹配项 当我使用replace()方法通过添加一些前缀来替换链接时 看起来很直截了当,对吧 这是我在更换链接时遇到的问题 有一些重复的链接,我已经。当试图用前缀替换它们时,它将被替换2次 对于e.x prefix

我试图使用变量全局替换字符串,但在替换时得到意外替换。我搜索了同一个问题,但没有找到任何解决方案,所以我将其发布在这里。也许你们会把我带到犯错误的地方

情况如下:

  • 我有一个
    HTML
    邮件正文和一个从邮件正文中提取并存储为数组的链接列表
  • 我正在尝试迭代links数组,并尝试从邮件正文中查找匹配项
  • 当我使用
    replace()
    方法通过添加一些前缀来替换链接时
  • 看起来很直截了当,对吧

    这是我在更换链接时遇到的问题

    有一些重复的链接,我已经。当试图用前缀替换它们时,它将被替换2次

    对于e.x

    prefix = 'http://this.prefix?redirect_uri='
    link = 'http://google.com'
    
    // Expected Output
    http://this.prefix?redirect_uri=http://google.com
    
    // Getting Output
    http://this.prefix?redirect_uri=http://this.prefix?redirect_uri=http://google.com
    
    您可以看到前缀正在重复

    我正在分享我的实际代码,所以,理解我的意思对你们会更有帮助

    
    让邮件正文=`
    

    急迫

    `; 常量链接=[ 'https://aabc.pagerduty.com/incidents', 'https://aabc.pagerduty.com/incidents/P9X3024' ] const processTrackingLinks=(linkArray,mailBody)=>{ 常量前缀https://test.io?redirect_uri='; //常量映射=[]; for(设i=0;i
    如果你知道为什么会这样, 我是做错了什么还是这是个问题 请告诉我


    如有任何决议,将不胜感激。:)

    这种方法怎么样。您不再需要
    链接
    数组

    const process = mailBody => {
        return mailBody.replace(/href="/g, `href="http://test.io?redirect_uri=`)
    }
    

    问题在于您使用的链接数组。双重替换是因为”https://abc.pagerduty.com/incidents“是的子字符串”https://abc.pagerduty.com/incidents/“

    请改用以下数组:

    let链接=[
    'https://abc.pagerduty.com/incidentsgoogle',
    'https://abc.pagerduty.com/incidents/',
    'https://abc.facebook.com'
    
    ];事件链接与两个搜索词匹配,因此将被替换两次。快速修复方法是将开头的
    插入链接数组和前缀,然后使用
    前缀+链接[i]。子字符串(1)
    作为替代;这样它只匹配一次:@ChrisG谢谢你的建议,我没有想到第二个链接会成为第一个匹配的子字符串,这是导致这一问题变得越来越严重的唯一原因。你可以在答案部分写下你的想法,我会将其作为正确答案添加。更可靠的解决方案是som这样:你的方法很完美,但我们有逻辑从
    href
    收集链接,这就是为什么我们有一系列链接。因此,它不会是那种替换。但我感谢你的努力。谢谢:)感谢,但我只需要在实际替换文本中添加更多字符。添加双引号已修复问题E