给定一个字符串,如:
“这条狗尾巴很长,而且是红色的!”
什么样的 jQuery 或 JavaScript 魔术可以用来将空格保持在一个空格最大值?
目标:
“这条狗尾巴很长,而且是红色的!”
给定一个字符串,如:
“这条狗尾巴很长,而且是红色的!”
什么样的 jQuery 或 JavaScript 魔术可以用来将空格保持在一个空格最大值?
目标:
“这条狗尾巴很长,而且是红色的!”
鉴于您还想覆盖制表符、换行符等,只需替换\s\s+
为' '
:
string = string.replace(/\s\s+/g, ' ');
如果您真的只想覆盖空格(因此不包含制表符、换行符等),请执行以下操作:
string = string.replace(/ +/g, ' ');
由于您似乎对性能感兴趣,因此我使用 firebug 对这些进行了分析。以下是我得到的结果:
str.replace( / +/g, ' ' ) -> 380ms
str.replace( /\s\s+/g, ' ' ) -> 390ms
str.replace( / {2,}/g, ' ' ) -> 470ms
str.replace( / +/g, ' ' ) -> 790ms
str.replace( / +(?= )/g, ' ') -> 3250ms
这是在 Firefox 上,运行 100k 字符串替换。
如果您认为性能有问题,我鼓励您使用 firebug 进行自己的分析测试。众所周知,人类不擅长预测他们程序中的瓶颈所在。
(另外,请注意 IE 8 的开发人员工具栏也有一个内置的分析器——可能值得检查一下 IE 中的性能如何。)
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
编辑: 如果您想替换所有类型的空白字符,最有效的方法是:
str = str.replace(/\s{2,}/g,' ');
一个更健壮的方法:这还负责删除初始和尾随空格(如果它们存在)。例如:
// NOTE the possible initial and trailing spaces
var str = " The dog has a long tail, and it is RED! "
str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");
// str -> "The dog has a long tail, and it is RED !"
您的示例没有这些空格,但它们也是一个非常常见的场景,并且接受的答案只是将它们修剪为单个空格,例如:“ The ... RED!”,这不是您通常需要的。
这是一种解决方案,但它将针对所有空格字符:
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ')
"The dog has a long tail, and it is RED!"
编辑:这可能更好,因为它的目标是一个空格,后跟 1 个或多个空格:
"The dog has a long tail, and it is RED!".replace(/ +/g, ' ')
"The dog has a long tail, and it is RED!"
替代方法:
"The dog has a long tail, and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"
我没有/\s+/
单独使用它,因为它多次替换跨越 1 个字符的空格,并且可能效率较低,因为它的目标超出了必要的范围。
我没有深入测试任何这些所以 lmk 如果有错误。
此外,如果您要进行字符串替换,请记住将变量/属性重新分配给它自己的替换,例如:
var string = 'foo'
string = string.replace('foo', '')
使用 jQuery.prototype.text:
var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )