Заменить регулярное выражение JavaScript - PullRequest
0 голосов
/ 17 января 2019

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

|1.774|1.78|1|||||1.781|1||||||||

Я применил выражение замены

str = str.replace(/\|\|/g, '| |')

Выходной результат

|1.774|1.78|1| || ||1.781|1| || || || |

но результат должен быть как

|1.774|1.78|1| | | | |1.781|1| | | | | | | |

Где ошибка? Спасибо

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ради интереса, вместо регулярного выражения вы можете использовать следующую функцию javascript:

let original = '|1.774|1.78|1|||||1.781|1||||||||';

let str = original.split('|').map((e, i, arr) => {
    // 1) if the element is not on the end of the split array...
    // 2) and if element is empty ('')
    // -> there's no data between '|' chars, so convert from empty string to space (' ')
    if (i > 0 && i < arr.length -1 && e === '') return ' ';
    // otherwise return original '|' if there is data found OR if element is on the end
    // -> of the split array
    else return e
}).join('|')

Регулярное выражение Wiktor довольно красиво, но я просто подумал, что предложу простую версию JS.

0 голосов
/ 17 января 2019

Вы должны использовать здесь прогноз, чтобы проверить | после |:

str = str.replace(/\|(?=\|)/g, '| ')

См. Демоверсию regex

Подробнее

  • \| - литерал |
  • (?=\|) - положительный прогноз, который соответствует, но не потребляет следующий | символ, таким образом, он остается вне соответствия, и этот символ все еще доступен для сопоставления во время следующей итерации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...