替换正则表达式javascript

时间:2019-01-17 08:43:27

标签: javascript regex replace

我有这样的字符串

|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 :(得分:6)

您需要在此处进行前瞻性检查,以检查|之后是否有|

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

请参见regex demo

详细信息

  • \|-文字|
  • (?=\|)-匹配但不消耗下一个|字符的正向超前,因此将其保留在匹配之外,并且此字符仍可在下一次迭代中进行匹配。
  • li>

答案 1 :(得分:0)

只是为了好玩,您可以使用以下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版本。