给出一个字符串:
"The dog has a long tail, and it is RED!"
可以使用哪种jQuery或JavaScript魔法将空格最多只保留一个空格?
目标:
"The dog has a long tail, and it is RED!"
答案 0 :(得分:740)
鉴于您还要覆盖标签页,换行符等,只需将\s\s+
替换为' '
:
string = string.replace(/\s\s+/g, ' ');
如果你真的想要只覆盖空格(因而不是标签,换行符等),请这样做:
string = string.replace(/ +/g, ' ');
答案 1 :(得分:141)
由于你似乎对性能感兴趣,我用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中的性能。)
答案 2 :(得分:38)
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
修改强> 如果你想要替换所有类型的空白字符,那么最有效的方法就是:
str = str.replace(/\s{2,}/g,' ');
答案 3 :(得分:16)
这是一个解决方案,但它将定位所有空格字符:
"The dog has a long tail, and it is RED!".replace(/\s\s+/g, ' ')
"The dog has a long tail, and it is RED!"
修改:这可能会更好,因为它会定位一个空格后跟一个或多个空格:
"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个字符的空格,并且可能效率较低,因为它的目标超出了必要的范围。
如果有错误,我没有对这些内容进行过深入的测试。
此外,如果您要进行字符串替换,请记住将变量/属性重新分配给自己的替换,例如:
var string = 'foo'
string = string.replace('foo', '')
使用jQuery.prototype.text:
var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )
答案 4 :(得分:13)
我有这种方法,我把它称为Derp方法,因为缺少一个更好的名字。
while (str.indexOf(" ") !== -1) {
str = str.replace(/ /g, " ");
}
答案 5 :(得分:12)
一种更健壮的方法:这样可以处理还删除初始和尾随空格(如果存在)。例如:
// 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 !"
你的例子没有那些空格,但它们也是一种非常常见的场景,而且接受的答案只是将它们修剪成单个空格,例如:“...... RED!”,这不是你通常会遇到的需要。
答案 6 :(得分:10)
更强大:
function trim(word) { word = word.replace(/[^\x21-\x7E]+/g, ' '); // change non-printing chars to spaces return word.replace(/^\s+|\s+$/g, ''); // remove leading/trailing spaces }
答案 7 :(得分:8)
我建议
string = string.replace(/ +/g," ");
仅用于空格或者
string = string.replace(/(\s)+/g,"$1");
也可以将多个退货转换为单一退货。
答案 8 :(得分:6)
如果你不想使用replace(替换字符串中的空格而不使用replace javascript),这是一个替代解决方案。
var str="The dog has a long tail, and it is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" ");
document.write(str);
答案 9 :(得分:5)
newbies等的综合未加密答案
这适用于像我这样测试你们其中一些人无法工作的脚本的所有假人。
以下3个示例是我在以下3个网站上删除特殊字符和额外空格的步骤(所有这些都完美无缺){1。 EtaVisa.com 2. EtaStatus.com 3. Tikun.com}所以我知道这些工作完美无缺。
我们将这些链接在一起超过50个并没有问题。
//这删除了特殊字符+ 0-9,只允许字母(大写和LOWER大小写)
function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}
//这删除了特殊字符,只允许字母(大写和LOWER大小写)和0-9 AND空格
function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}
//这删除了特殊字符,只允许字母(大写和LOWER大小写)和0-9 AND空格 //最后的.replace(/ \ s \ s + / g,"")删除多余的空格 //当我使用单引号时,它不起作用。
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}
<强> :: NEXT :: 强>
保存#3为a .js
//我打电话给我的NoDoubles.js
<强> :: NEXT :: 强> 将您的JS纳入您的页面
<script language="JavaScript" src="js/NoDoubles.js"></script>
在表单字段中包含此内容::例如
<INPUT type="text" name="Name"
onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
所以它看起来像这个
<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>
这将删除特殊字符,允许单个空格并删除多余的空格。
答案 10 :(得分:5)
我知道我迟到了,但我发现了一个很好的解决方案。
这是:
var myStr = myStr.replace(/[ ][ ]*/g, ' ');
答案 11 :(得分:4)
也有可能:
str.replace( /\s+/g, ' ' )
答案 12 :(得分:1)
我知道我们必须使用正则表达式,但是在一次采访中,我被要求不要使用正则表达式。
@slylytyler帮助我提出了以下方法。
const testStr = "I LOVE STACKOVERFLOW LOL";
const removeSpaces = str => {
const chars = str.split('');
const nextChars = chars.reduce(
(acc, c) => {
if (c === ' ') {
const lastChar = acc[acc.length - 1];
if (lastChar === ' ') {
return acc;
}
}
return [...acc, c];
},
[],
);
const nextStr = nextChars.join('');
return nextStr
};
console.log(removeSpaces(testStr));
答案 13 :(得分:1)
Jquery有trim()函数,它基本上就像这样#34; FOo Bar&#34;进入&#34; FOo Bar&#34;。
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
它更有用,因为它会自动删除字符串开头和结尾的空格。不需要正则表达式。
答案 14 :(得分:0)
我的名字是小埃德尔西奥。如果您想防止出现 2 个或更多空格,这里是一个很好的解决方案:
<label">Name</label>
<input type="text" name="YourInputName">
<script>
var field = document.querySelector('[name="YourInputName"]');
field.addEventListener('keyup', function (event) {
var userName = field.value;
userName = userName.replace(/\s{2,}/g, ' ');
field.value = userName;
});
</script>
var field = document.querySelector('[name="YourInputName"]');
field.addEventListener('keyup', function (event) {
var userName = field.value;
userName = userName.replace(/\s{2,}/g, ' ');
field.value = userName;
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Your-title</title>
<meta charset="utf-8">
</head>
<body>
<form>
<label>Name</label>
<input type="text" name="YourInputName">
</form>
</body>
</html>
答案 15 :(得分:0)
'鼠标指针触摸'.replace(/ ^ \ s + | \ s + $ |(\ s)+ / g,“ $ 1”)应该可以解决问题!
答案 16 :(得分:0)
不使用替换,string = string.split(/ \ W + /);
答案 17 :(得分:0)
此脚本可删除单词和修饰之间的所有空白(多个空格,制表符,返回等):
// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
var _trimLeft = /^\s+/,
_trimRight = /\s+$/,
_multiple = /\s+/g;
return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};
答案 18 :(得分:0)
要获得更多控制权,您可以使用replace回调来处理该值。
value = "tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
答案 19 :(得分:0)
var text = `xxx df dfvdfv df
dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
结果:
"xxx df dfvdfv df dfv"
答案 20 :(得分:0)
尝试使用单个空格替换多个空格。
<script type="text/javascript">
var myStr = "The dog has a long tail, and it is RED!";
alert(myStr); // Output 'The dog has a long tail, and it is RED!'
var newStr = myStr.replace(/ +/g, ' ');
alert(newStr); // Output 'The dog has a long tail, and it is RED!'
</script>
答案 21 :(得分:0)
我们可以使用sed system命令帮助解释下面的正则表达式。类似的正则表达式可以在其他语言和平台中使用。
将文本添加到某个文件中说测试
manjeet-laptop:Desktop manjeet$ cat test
"The dog has a long tail, and it is RED!"
我们可以使用以下正则表达式将所有空格替换为单个空格
manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"
希望这符合目的
答案 22 :(得分:0)
var myregexp = new RegExp(/ {2,}/g);
str = str.replace(myregexp,' ');
答案 23 :(得分:0)
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
或者如果您还想替换标签:
var replaced = string.replace(/\s+/g, " ");