正则表达式用一个空格替换多个空格

时间:2009-12-30 17:28:59

标签: javascript jquery regex

给出一个字符串:

"The dog      has a long   tail, and it     is RED!"

可以使用哪种jQuery或JavaScript魔法将空格最多只保留一个空格?

目标:

"The dog has a long tail, and it is RED!"

24 个答案:

答案 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, " ");
}

Running it in JSPerf gives some surprising results.

答案 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>

了解更多@ Replacing Multiple Spaces with Single Space

答案 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, " ");