正则表达式替换只有一个号码转换为字符串

正则表达式替换只有一个号码转换为字符串

问题描述:

我有一个代码:正则表达式替换只有一个号码转换为字符串

var locals = ["PontoRoteiro[0].LocalRoteiro[1]","PontoRoteiro[0].LocalRoteiro[3]","PontoRoteiro[0].LocalRoteiro[4]","PontoRoteiro[0].LocalRoteiro[5]"]; 
var result = []; 

for(var i = 0; i < locals.length; i++) 
{ 
    var l = locals[i]; 
    l = l.replace("^PontoRoteiro[0].LocalRoteiro[[0-9]*$]","PontoRoteiro[0].LocalRoteiro[" + i + "]" ) 
    result.push(l); 
} 

console.log(result); 

我需要对项目进行排序,留在升序没有跳过的索引,如何更换不尊重号码索引是?

+0

“locals”中的所有值具有相同的模式“PontoRoteiro [0] .LocalRoteiro [XXXX]”'?如果是这种情况,只需生成一个长度相同的新阵列并填写值 –

+0

预期结果是什么? ''PontoRoteiro [0] .LocalRoteiro [0]“,”PontoRoteiro [0] .LocalRoteiro [1]“,”PontoRoteiro [0] .LocalRoteiro [2]“,”PontoRoteiro [0] .LocalRoteiro [3]“] '?请参阅https://jsfiddle.net/v4hgoj74/ –

+1

'locals.map((e,i)=> e.replace(/(。*?\ d +。*?)\ d +(。*)/,\'$ 1 $ {i} $ 2 \'))' – Tushar

你缺少的逃逸。 []字符:

var locals = ["PontoRoteiro[0].LocalRoteiro[1]","PontoRoteiro[0].LocalRoteiro[3]","PontoRoteiro[0].LocalRoteiro[4]","PontoRoteiro[0].LocalRoteiro[5]"]; 
     var result = []; 
     var regex, i, l; 
     for(i = 0; i < locals.length; i++) 
     { 
      l = locals[i]; 
      regex = /^PontoRoteiro\[0\]\.LocalRoteiro\[[0-9]+\]/; 
      l = l.replace(regex,"PontoRoteiro[0].LocalRoteiro[" + i + "]"); 
      result.push(l); 
     } 

     console.log(result); 

[.是特殊字符,你必须转义:

l = l.replace(/^PontoRoteiro\[0\]\.LocalRoteiro\[\d+\]/,"PontoRoteiro[0].LocalRoteiro["+i+"]") 

您可以简化:

l = l.replace(/LocalRoteiro\[\d+\]/,"LocalRoteiro["+i+"]") 
+0

']'不是字符类以外的特殊字符。 '.'是字符类以外的特殊字符。 –

+0

@WiktorStribiżew:你说得对,这是我的习惯。 – Toto

+0

这实际上是一个很好的实践,以逃避']',只是它不是一个特殊的字符在这里。 –