我知道在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中使用正则表达式或其他方式吗?
答案 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, '\\$&')
进行转义,以防它是特殊的正则表达式元字符(如(
或)
)。