使用Reg Ex传输数据格式

时间:2019-03-14 06:52:11

标签: javascript regex

我有很多类似的字符串

32-1233-21323300
32-dsdw-ee322300
32-ee23-cd3de300

替换后的预期结果

3451-1233-213.233
3451-dsdw-ee3.223
3451-ee23-cd3.de3
......

我想要的是在函数中使用正则表达式来传输数据格式。

function dataTransfer('32 -xxxx-xxxxxx00','4351-xxxx-xxx.xxx')

我以前的代码如下:

arrData(d=>{
  d = d.replace(/^[32]/,"3451").replace(/[00]$/,"");
  d = d.slice(0, 13) + '.' + d.slice(13);
})

但是我认为应该有其他好的解决方案。有什么建议吗?

附录: 感谢您的所有反馈。 放弃,我要尝试分析“ 32-xxxx-xxxxxx00”之类的格式。 x代表任何字符。

用户可以输入参数,例如32-xxxx-xxxxxx00和4351-xx0x-xxx.xx9 我将获得源格式和目标格式。然后,我尝试分析格式并使用RegEx完成数据传输。但这似乎太复杂了。

5 个答案:

答案 0 :(得分:1)

此正则表达式可以帮助您。在正则表达式下尝试

“ 32-1233-21323300” .replace(/ ^(32)/,“ 3451”)。replace(/([[0] +)$ /,“”)。replace(/([0 -9a-zA-Z] {3})$ /,“。$ 1”)

输出: 3451-1233-213.233

答案 1 :(得分:1)

我不明白为什么您的解决方案不好,但是如果您想使用1个正则表达式,则可以使用this

^(?:32)(-[\da-z]{4}-[\da-z]{3})([\da-z]{3})

它将产生2组,然后您可以"3451"+group1+"."+group2创建最终字符串

答案 2 :(得分:1)

您可以使用/(^32)(.{9})(.{3})(00$)/合并子字符串:

const a = '32-dsdw-ee322300'.replace(/(^32)(.{9})(.{3})(00$)/, `3451$2.$3`)
console.log(a)

答案 3 :(得分:1)

您只需要替换这两个即可。检查此JS演示。

var arr = ['32-1233-21323300','32-dsdw-ee322300','32-ee23-cd3de300']

for (s of arr) {
  console.log(s + " --> " + s.replace(/^32/,'3451').replace(/(.{3})(.{3})00$/,'$1.$2'));
}

答案 4 :(得分:1)

您无需正则表达式即可轻松做到这一点:

    var s = "32-1233-21323300";
    if(s.startsWith("32-") && s.endsWith("00")){
      // remove 32- at the beginning
      s = "3451-" + s.slice(3);
      // remove 00 at the end
      s = s.slice(0, s.length - 2);
      // insert dot
      s = s.slice(0, s.length - 3) + "." + s.slice(s.length - 3);
      console.log(s);
    }