Javascript函数确保字符串每n个字符有空格

时间:2017-08-24 12:26:22

标签: javascript regex

我知道在javascript中你可以使用正则表达式在字符串中每n个字符添加一个字符:

str.replace(/(.{5})/g,"$1*");

这会在字符串中每5个字符插入一个'*'。

但是,我想要一种只添加不存在的字符的方法。

例如。在需要的位置插入一个空格,以确保至少每5个字符有一个空格字符(并且不要在不需要的地方插入):

myfunc('01234567890', ' ', 5) = '01234 56789 0'
myfunc('01 234567890', ' ', 5) = '01 23456 7890'
myfunc('01 234 56789 0', ' ', 5) = '01 234 56789 0'

这可以在javascript中使用正则表达式或其他方式吗?

2 个答案:

答案 0 :(得分:5)

使用\d匹配数字,因此请将{5}位与\d{5}匹配,并在使用$1后插入空格;还可以使用向前看(?= \ S)来声明已经没有空格:

var samples = ['01234567890', '01 234567890', '01 234 56789 0', '0123456789'];

console.log(
  samples.map(s => s.replace(/(\d{5})(?=\S)/g, '$1 '))
);

答案 1 :(得分:2)

.替换为[0-9]以仅匹配数字,并使用否定前瞻(?!...)其中...是您的字符:



function myfunc(s, ch, limit) {
  var rx = new RegExp(
    "[0-9]{"+limit+"}"+ // Match a digit, limit times
    "(?!"+  // Only match if, immediately to the right, there is no
    ch.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')+ // delimiting char (escaped)
    "|$)", // or end of string
    "g"); // Global modifier, replace all occurrences
  return s.replace(rx, "$&" + ch); // Replace with the match itself + delimiting char
}
console.log(myfunc('01234567890', ' ', 5))    // = '01234 56789 0'
console.log(myfunc('01 234567890', ' ', 5))   // = '01 23456 7890'
console.log(myfunc('01 234 56789 0', ' ', 5)) // = '01 234 56789 0'




生成的样本正则表达式在此处看起来像[0-9]{5}(?! |$)[0-9]{5}(?! |$)将匹配5个未跟随空格或字符串结尾的数字(添加因为您很少想在字符串的末尾插入任何内容,因此,如果您还要在结尾处插入空格字符串,从模式中移除|$,替换$& 将替换为自身($&)和后面的空格。

请注意ch使用.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')进行转义,以防它是特殊的正则表达式元字符(如())。