2017-07-14 182 views
0

美好的一天。我有一个脚本正在执行一个替代字符串部分的输入。它的工作原理应该如此;除非两个下划线分开的字符串包含相同的字符。下面的图片,我想第二个字符“M”被替换为“M1”而不是第一个。替换字符串中的变量替换错误的字符

有没有一种方法可以指定或声明准确地将字符串中的变量替换为许多相同字符的位置?任何帮助最受赞赏。

enter image description here

+0

我不太明白你在问什么。那么,您希望最终的字符串在示例PH_WM_M1_LT中? – gmwagner

回答

1

您可能需要分割,然后重新组装与替换值,而不是值替换的一切:

var spl = getVal.split('_'); 
for(var idx =0 ; idx < spl.length; idx++) { 
    var b = spl[idx].replace(/\d+/g,''); // remove all numbers? 
    spl[idx] = b + afVal; 
} 
rep = spl.join('_'); 
+0

我确实需要拆分,替换,然后重新组装,因为我目前的状况与订购和组合有关。谢谢。 – arios

+0

这实际上更安全。特别是当我遇到像例如PH_INF_M_M我的输入到达第一个静止。通过先分割并知道需要更改的索引,我不需要担心类似的字符串前面有下划线。谢谢。 – arios

+0

可以不用for循环。相同的概念。谢谢。 – arios

1

一种方式做到这一点是简单地替换字符串中添加下划线,如果这是你如何期望M至出现的字符串中。

var a = "PH_WM_M_LT" 
 
console.log(a.replace("_M", "_M1"));

+1

我喜欢这个,因为它是一个简单的修复。然而,它提出了一些我并没有预料到的细微差别。这是一个动态组合,它可能不总是以前用下划线表示。 (例如PH)感谢您的帮助。 – arios

+0

忘记了,我有一个索引让我知道它在数组中的顺序。快速如果陈述和好去。谢谢。 – arios

1

如果你想指定一个特定的位置,你可以在字符串中找到使用indexof的位置,例如getVal.indexof(“_ M”)。然后你可以做一些你使用子字符串然后专门添加下面的值

function insertString(insertPoint, sValue, insertValue) 
    { 
     var n = sValue.length; 
     var frontHalf = sValue.substring(0,insertPoint); 
     var backHalf = sValue.substring(insertPoint,n); 
     return frontHalf + insertValue + backHalf; 
    } 
+0

谢谢你,我的屏幕截图上方有几行有一个indexOf,所以你是绝对正确的!谢谢 – arios