我有很多类似的字符串
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完成数据传输。但这似乎太复杂了。
答案 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);
}