Передача формата данных с помощью Reg Ex - PullRequest
0 голосов
/ 14 марта 2019

У меня есть партия строк, как

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

Результаты ожидания после замены

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

Я хочу использовать регулярные выражения в функции для передачи формата данных.

функция передачи данных ('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 '. х обозначает любой символ.

Пользователь может вводить параметры как 32-xxxx-xxxxxx00 и 4351-xx0x-xxx.xx9 Я получу исходный и целевой формат. затем я пытаюсь проанализировать формат и использовать RegEx для завершения передачи данных. Но это кажется слишком сложным.

Ответы [ 5 ]

1 голос
/ 14 марта 2019

Вы можете сделать это легко без регулярных выражений:

    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);
    }
1 голос
/ 14 марта 2019

Вам просто нужно эти два заменить.Проверьте эту демонстрацию 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'));
}
1 голос
/ 14 марта 2019

Я не понимаю, почему ваше решение плохое, но если вы хотите вместо этого 1 регулярное выражение, вы можете использовать this :

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

Он создаст 2 группы, а затем вы можете сделать "3451"+group1+"."+group2, чтобы создать свою окончательную строку

1 голос
/ 14 марта 2019

Вы можете использовать /(^32)(.{9})(.{3})(00$)/, объединяя подстроки:

const a = '32-dsdw-ee322300'.replace(/(^32)(.{9})(.{3})(00$)/, `3451$2.$3`)
console.log(a)
1 голос
/ 14 марта 2019

Может быть, это регулярное выражение поможет вам. Попробуйте ниже регулярное выражение

"32-1233-21323300" .Надеть (/ ^ (32) /, "3451"). Заменить (/ ([0] +) $ /, ""). Заменить (/ ([0 -9а-Za-Z] {3}) $ /, "$ 1")

Вывод: 3451-1233-213.233 как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...