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

2020/09/24 23:41 · javascript ·  · 0评论

给定一个像这样的字符串:

“狗尾巴很长,是红色的!”

什么样的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上运行的10万个字符串替换。

如果您认为性能存在问题,建议您使用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,' ');

这是一种解决方案,尽管它将针对所有空格字符:

"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+/, '') )

我有此方法,由于缺乏更好的名称,我将其称为Derp方法。

while (str.indexOf("  ") !== -1) {
    str = str.replace(/  /g, " ");
}

在JSPerf中运行它会产生一些令人惊讶的结果。

更加健壮的方法:如果存在初始和尾随空格,它将删除它们。例如:

// 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!”,这通常不是您所需要的。

更强大:

功能修剪(单词)
{
    字= word.replace(/ [^ \ x21- \ x7E] + / g,''); //将非打印字符更改为空格
    返回word.replace(/ ^ \ s + | \ s + $ / g,``); //删除前导/尾随空格
}

我建议

string = string.replace(/ +/g," ");

仅用于空格

string = string.replace(/(\s)+/g,"$1");

也可以将多个收益转化为单一收益。

我知道我参加晚会很晚,但是我发现了一个不错的解决方案。

这里是:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');

如果您不想使用替换(如果不使用替换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);

针对新手等的全面未加密答案。

这适用于像我这样的所有假人,它们测试了某些无法正常工作的人编写的脚本。

以下3个示例是我在以下3个网站上删除特殊字符和多余空格的步骤(所有这些都可以正常工作){1。EtaVisa.com 2. EtaStatus.com 3. Tikun.com},因此我知道它们完美地工作了。

我们一次将这些链与50多个链链接在一起,没有问题。

//删除了特殊字符+ 0-9,仅允许使用字母(大写和小写)

function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}

//删除了特殊字符,只允许使用字母(大写和小写)和0-9 AND空格

function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}

//这样就删除了特殊字符,只允许使用字母(大写和小写)和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"/>

这将删除特殊字符,允许使用单个空格并删除多余的空格。

也有可能:

str.replace( /\s+/g, ' ' )
var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

或者,如果您也想替换标签:

var replaced = string.replace(/\s+/g, " ");

jQuery具有trim()函数,该函数基本上将类似“ FOo Bar”的内容转换为“ FOo Bar”。

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

它更有用,因为它也会自动删除字符串开头和结尾的空格。无需正则表达式。

是不使用替换,string = string.split(/ \ W + /);

我知道我们必须使用正则表达式,但是在一次采访中,我被要求不要使用正则表达式。

@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));
var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');

我们可以使用在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!"

希望这能达到目的

尝试使用单个空格替换多个空格。

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

阅读更多@ 用单个空格替换多个空格

var text = `xxx  df dfvdfv  df    
                     dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');

结果:

"xxx df dfvdfv df dfv"

为了获得更多控制,您可以使用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"

此脚本删除单词和修饰之间的所有空白(多个空格,制表符,返回等):

// 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, ' ');
};

'鼠标指针触摸'.replace(/ ^ \ s + | \ s + $ |(\ s)+ / g,“ $ 1”)应该可以解决问题!

本文地址:http://javascript.askforanswer.com/zhengzebiaodashiyongdangekonggetihuanduogekongge.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!