У меня есть партия строк, например
32-1233-21323300
32-dsdw-ee322300
32-ee23-cd3de300
Результат ожидания после замены
3451-1233-213.233
3451-dsdw-ee3.223
3451-ee23-cd3.de3
......
Я хочу использовать регулярное выражение в функции для передачи формата данных.
функция 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 для завершения передачи данных. Но это кажется слишком сложным.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Может быть, это регулярное выражение поможет вам. Попробуйте ниже регулярное выражение
"32-1233-21323300".replace(/^(32)/,"3451").replace(/([0]+)$/,"").replace(/([0-9a-zA-Z ]{3})$/,".$1")
Выход: 3451-1233-213.233 в соответствии с вашими ожиданиями.
Я не понимаю, почему ваше решение плохое, но если вам нужно 1 регулярное выражение, вы можете использовать это:
^(?:32)(-[\da-z]{4}-[\da-z]{3})([\da-z]{3})
Он создаст 2 группы, а затем вы можете сделать "3451"+group1+"."+group2, чтобы создать окончательную строку.
Вы можете использовать /(^32)(.{9})(.{3})(00$)/, объединяя подстроки:
const a = '32-dsdw-ee322300'.replace(/(^32)(.{9})(.{3})(00$)/, `3451$2.$3`)
console.info(a)Вам просто нужно заменить эти два. Проверьте эту демонстрацию JS.
var arr = ['32-1233-21323300','32-dsdw-ee322300','32-ee23-cd3de300']
for (s of arr) {
console.info(s + " --> " + s.replace(/^32/,'3451').replace(/(.{3})(.{3})00$/,'$1.$2'));
}Вы можете сделать это легко без регулярного выражения:
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.info(s);
}