fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[js] 第2天 写一个方法去掉字符串中的空格

Open haizhilin2013 opened this issue 5 years ago • 167 comments

写一个方法去掉字符串中的空格,要求传入不同的类型分别能去掉前、后、前后、中间的空格

haizhilin2013 avatar Apr 17 '19 21:04 haizhilin2013

欢迎大家展开多种不同的方法

haizhilin2013 avatar Apr 17 '19 21:04 haizhilin2013

        var str = '  abc d e f  g ';
        function trim(str) {
            var reg = /\s+/g;
            if (typeof str === 'string') {
                var trimStr = str.replace(reg,'');
            }
            console.log(trimStr)
        }
        trim(str)

yxkhaha avatar Apr 18 '19 03:04 yxkhaha

var trim = function(str){ return str.replace(/\s*/g,""); } str.replace(/\s*/g,""); //去除字符串内所有的空格 str.replace(/^\s*|\s*$/g,""); //去除字符串内两头的空格 str.replace(/^\s*/,""); //去除字符串内左侧的空格 str.replace(/(\s*$)/g,""); //去除字符串内右侧的空格

qq674785876 avatar May 05 '19 07:05 qq674785876

function deleSpac(str,direction) { // 1 串的模板 2 清除哪边空格
            let Reg = '';
            switch(direction) {
                case 'left' : // 去除左边
                    Reg = /^[\s]+/g;
                    break;
                case 'right' : // 去除右边
                    Reg = /([\s]*)$/g;
                    break;
                case 'both' : // 去除两边
                    Reg = /(^\s*)|(\s*$)/g
                    break;
                default :   // 没传默认全部,且为下去除中间空格做铺垫
                    Reg = /[\s]+/g;
                    break;
            }
            let newStr = str.replace(Reg,'');
            if ( direction == 'middle' ){
                let RegLeft = str.match(/(^\s*)/g)[0]; // 保存右边空格
                let RegRight = str.match(/(\s*$)/g)[0]; // 保存左边空格
                newStr = RegLeft + newStr + RegRight; // 将空格加给清完全部空格后的字符串
            }
            return newStr;
        }

shulandmimi avatar May 07 '19 10:05 shulandmimi

const str = '  s t  r  '

const POSITION = Object.freeze({
  left: Symbol(),
  right: Symbol(),
  both: Symbol(),
  center: Symbol(),
  all: Symbol(),
})

function trim(str, position = POSITION.both) {
  if (!!POSITION[position]) throw new Error('unexpected position value')
  
  switch(position) {
      case(POSITION.left):
        str = str.replace(/^\s+/, '')
        break;
      case(POSITION.right):
        str = str.replace(/\s+$/, '')
        break;
      case(POSITION.both):
        str = str.replace(/^\s+/, '').replace(/\s+$/, '')
        break;
      case(POSITION.center):
        while (str.match(/\w\s+\w/)) {
          str = str.replace(/(\w)(\s+)(\w)/, `$1$3`)
        }
        break;
      case(POSITION.all):
        str = str.replace(/\s/g, '')
        break;
      default: 
  }
  
  return str
}

const result = trim(str)

console.log(`|${result}|`) //  |s t  r| 

linghucq1 avatar May 08 '19 07:05 linghucq1

function trimStr(str, type) {
    const regObj = {
        left: /^\s+/,
        middle: /(^\s+)(\S)|\s+(\S)/g,
        right: /\s+$/,
        both: /(^\s+)|(\s+$)/g,
        all: /\s+/g
    };
    const reg = type && regObj[type] ? regObj[type] : regObj.both;
    const replaceStr = type === 'middle' ? (m, $1, $2, $3) => $1 ? m : $3 : '';
    return str.replace(reg, replaceStr);
}
trimStr('  aa bb  cc d d ee  ','middle');

qqdnnd avatar May 16 '19 03:05 qqdnnd

  • Regex: string.replace(/\s/g, '')
  • join: string.split(' ').join('')

tzjoke avatar May 16 '19 11:05 tzjoke

var str = ' 1 2 3445 6    ';
console.log(str.split(' ').join('')) // 输出"1234456"

这样不是很简单吗 @haizhilin2013

yangchunboy avatar May 27 '19 03:05 yangchunboy

function noSpace(str){ if (!str) return '' return str.split('').filter(item => item !== ' ').join('') }

Hxiaongrong avatar May 28 '19 06:05 Hxiaongrong

" 123 56 ".replace(/\s+/g, "")

Zhou-Bill avatar Jun 04 '19 14:06 Zhou-Bill

function trim(str) {
    return str.split(' ').join('');
}
var result = trim(' hello world, I am keke. ');
console.log(result); // helloworld,Iamkeke. 

likeke1997 avatar Jun 05 '19 07:06 likeke1997

 str.trim()

myprelude avatar Jun 13 '19 08:06 myprelude

const trim = (str) => str.split('').filter((item) => item !== ' ').join('');

wanghaooo avatar Jun 17 '19 14:06 wanghaooo

str.replace(/[ ]/g, "");

Damon99999 avatar Jun 17 '19 14:06 Damon99999

function removeSpace (str, type) {

if (type === 'before') {
	// 递归去除字符串前面的空格
	return (str && str[0] === ' ')? removeSpace(str.substring(1), type): str;
} else if (type === 'after') {
	// 递归去除字符串后面的空格
	return (str && str[0] && str[str.length - 1] === ' ')? removeSpace(str.substring(0, str.length-1), type): str;
} else if (type === 'before-after') {
	// 递归去除字符串前后的空格
	return (str = removeSpace(str, 'before')) && (str = removeSpace(str, 'after'));
} else if (type === 'between') {
	// 递归去除字符串中间的空格
	// 首先找到 'x y'类型的字符位置
	let x = y = 0;
	outer:
	for (let i = 0; i < str.length - 1; i ++) {
		if (str[i] !== ' ' && str[i+1] === ' ') {
			x = i;
			let j = i + 2;
			while(j < str.length && str[j] === ' ') {
				j++;
			}
			if (j < str.length) {
				y = j;
			}
			break outer;
		}
	}
	return y !== 0? removeSpace(str.substring(0, x + 1) + str.substring(y), type): str;
} else {
	throw new Error('类型错误!');
}

}

AricZhu avatar Jun 18 '19 01:06 AricZhu

myTrim: (str) => {
        // 1 去除所有空格
        str = str.replace(/\s*/g, '')
        // 2去除所有空格
        str = str.split(' ').join('')


        // 1 去除开头空格
        str = str.replace(' ', '')
        // 2 去除开头空格
        str = str.replace(/^\s*/, '')


        // 1 去除结尾空格
        str = str.replace(/\s*$/, '')


        // 1 去除中间空格
        while(str.match(/\w\s+\w/)) {
            str = str.replace(/^\s*|\s*$/, '')
        }
        
        return str
    }

persist-xyz avatar Jun 26 '19 09:06 persist-xyz

正则不是很熟,感觉中间的空格也能用正则去掉

const trimString = ({str = "", position = "both"}) => {
  if (!str) {
    return str;
  }

  const removePos = {
    left: () => str.replace(/^\s+/, ""),
    right: () => str.replace(/\s+$/, ""),
    both: () => str.replace(/(^\s+)|(\s+$)/g, ""),
    // 这个方法在字符串中间有多个空格时会有问题
    // middle: () =>
    //   str
    //     .split(" ")
    //     .map((item) => (item ? item : " "))
    //     .join(""),
    // 下面这种正则更优雅
    // middle: () => {
    //   let result = str;
    //   while (/\w+\s+\w+/.test(result)) {
    //     result = result.replace(/(\w+)\s+(\w+)/, '$1$2');
    //   }
    //   return result;
    // },
    // 一行正则
    // middle: () => str.replace(/\b\s*\b/g,''),
    // 普通方法
    middle: () => {
      const leftSpace = str.match(/^\s+/)[0];
      const rightSpace = str.match(/\s+$/)[0];
      return leftSpace + str.split(" ").join("") + rightSpace;
    },
    all: () => str.split(" ").join("")
  };

  return removePos[position]();
};

const a = "  12a b       cde fff ";
console.log("trim left:", trimString({str: a, position: "left"}));
console.log("trim right:", trimString({str: a, position: "right"}));
console.log("trim middle", trimString({str: a, position: "middle"}));
console.log("trim both:", trimString({str: a}));
console.log("trim all:", trimString({str: a, position: "all"}));

Konata9 avatar Jul 01 '19 02:07 Konata9

不太明白为什么要分左中右,正着是贪婪的

function trim (str) {
	let reg = /\s+/g
	return str.replace(reg, '')
}

alowkeyguy avatar Jul 02 '19 09:07 alowkeyguy

var str = ' 1 2 3445 6    ';
console.log(str.split(' ').join('')) // 输出"1234456"

这样不是很简单吗 @haizhilin2013

这个如果遇到连续的空格呢

DarthVaderrr avatar Jul 03 '19 07:07 DarthVaderrr

String.prototype.myTrim = function(option){
  var _this = this;
  var fn = {
    front:function(){
      return _this.replace(/^\s+/,'')
//       return _this.trimLeft()//或_this.trimStart() ie不支持
    },
    end:function(){
      return _this.replace(/\s+$/,'')
//       return _this.trimRight()//或 _this.trimEnd() ie不支持
    },
    frontEnd:function(){
      return _this.replace(/^\s+|\s+$/g,'');
//       return _this.trim()//--包括所有的空格字符 (space, tab, no-break space 等)以及所有的行结束符(如 LF,CR)
//       return _this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
/* 某些软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM),
转码后是“\uFEFF”,因此我们在读取时需要自己去掉这些字符。
“\xA0”其实就是HTML中常见的“&nbsp;” */
    },
    content:function(){
      var mStr = this.all();
      var lStr = _this.match(/^\s+/)[0];
      var rStr = _this.match(/\s+$/)[0]
      return lStr + mStr + rStr
    },
    all:function(){
      return _this.replace(/\s+/g,'')
    }
  }
  return fn[option]();
}
var str = '  s t  r  ';
var _str = {}
_str.front = str.myTrim('front')
_str.end = str.myTrim('end')
_str.frontEnd = str.myTrim('frontEnd')
_str.content = str.myTrim('content')
_str.all = str.myTrim('all')
console.log(_str)

全角空格还需要匹配“\u3000”

boboyu avatar Jul 03 '19 10:07 boboyu

@boboyu 格式化下代码吧,用markdown的语法

haizhilin2013 avatar Jul 03 '19 10:07 haizhilin2013

var str = ' 1 2 3445 6    ';
console.log(str.split(' ').join('')) // 输出"1234456"

这样不是很简单吗 @haizhilin2013

这个如果遇到连续的空格呢

连续的也没有问题啊

chenliwen123 avatar Jul 05 '19 02:07 chenliwen123

let str = '21 sdf asdf 123 ' str.replace(/ /g, '') str.split(' ').join('')

Azathoth-H avatar Jul 12 '19 03:07 Azathoth-H

function trim(str, types = ['start', 'end', 'middle']) {
  types.forEach(type => {
    switch (type) {
      case 'start':
        str = str.replace(/^\s*/, '')
        break
      case 'end':
        str = str.replace(/\s*$/, '')
        break
      case 'middle':
        while (str.match(/(\S)\s+(\S)/)) {
          str = str.replace(/(\S)\s+(\S)/g, '$1$2')
        }
        break
      default:
        break
    }
  })
  return str
}

shufangyi avatar Jul 17 '19 09:07 shufangyi

var removeSpace1 = (str, type) => {
  if (!str) return 
  switch(type){
    case 'ALL':
      return str.replace(/\s/g, '')
    case 'TRIM_HEAD_AND_TAIL':
      return str.replace(/^\s*|\s*$/g, '')
    case 'TRIM_HEAD':
      return str.replace(/^\s*/g, '')
    case 'TRIM_TAIL':
      return str.replace(/\s*$/g, '')
    default:
      return str
  }
}

goldEli avatar Jul 24 '19 04:07 goldEli

// 我看大家基本上都用正则解决的,想了一下js提供的字符串方法也能解决。简洁程度比不上正则。
let str = '  a   b  c  ';
let delBlank = (str, type) => {
  let count = 0,_str = str.split(''), arr = [];
  _str.map((r, i) => {
    if (r !== " ") { // 主要是为了取第一个,最后一个不是" "的下标
      !count ? (arr[0] = i,count++) : arr[1] = i + 1
    }
  })
  switch (type) {
    case 'all':
      return str.split(' ').join('')
      break
    case 'left':
      return str.slice(arr[0])
      break
    case 'right':
      return str.slice(0, arr[1])
      break
    case 'centre':
      // 字符串拼接:左边的空格 + 去除前后空格后的字符串,然后再删除所有的空格 + 尾部的空格
      return str.slice(0, arr[0]) + str.slice(arr[0], arr[1]).split(' ').join('') + str.slice(arr[1], _str.length)
      break
    default:
      return str;
      break
  }
}
console.log(delBlank(str, 'centre'))

ZhaoYu8 avatar Jul 25 '19 10:07 ZhaoYu8

注意审题啊,要求的是去掉空格,不是去掉空白字符

const trim = ( () => {
  const ALL      = Symbol( `ALL` );
  const END      = Symbol( `END` );
  const INSET    = Symbol( `INSET` );
  const START    = Symbol( `START` );
  const SURROUND = Symbol( `SURROUND` );

  const WHITESPACE = `\u0020`;
  const REGEXP = {
    [ ALL ]      : new RegExp( `${ WHITESPACE }+`, `gu` ),
    [ END ]      : new RegExp( `${ WHITESPACE }+$`, `u` ),
    [ INSET ]    : new RegExp( `(?<!^|${ WHITESPACE })${ WHITESPACE }+(?!$|${ WHITESPACE })`, `gu` ),
    [ START ]    : new RegExp( `^${ WHITESPACE }+`, `u` ),
    [ SURROUND ] : new RegExp( `^${ WHITESPACE }+|${ WHITESPACE }+$`, `gu` ),
  };

  function trim ( string = ``, type ) {
    return REGEXP[ type ] ?
      string.replace( REGEXP[ type ], `` ) :
      string;
  }

  trim.ALL      = ALL;
  trim.END      = END;
  trim.INSET    = INSET;
  trim.START    = START;
  trim.SURROUND = SURROUND;

  return trim;
} )();
const string = '  abc d e f  g ';

console.log( JSON.stringify( trim( string, trim.ALL ) ) );
console.log( JSON.stringify( trim( string, trim.END ) ) );
console.log( JSON.stringify( trim( string, trim.INSET ) ) );
console.log( JSON.stringify( trim( string, trim.START ) ) );
console.log( JSON.stringify( trim( string, trim.SURROUND ) ) );

IanSun avatar Jul 26 '19 06:07 IanSun

 str.trim()

这个是删去两端的空格,而不会删去字符中间的空格:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

Cillivian avatar Jul 26 '19 09:07 Cillivian

let str = '  abcde fgh ijk ';
console.log("    原字符串:" + str);
console.log("  去掉左空格:" + str.replace(/^\s*/g, ''));
console.log("  去掉右空格:" + str.replace(/\s*$/g, ''));
console.log("去掉左右空格:" + str.replace((/^\s*/g|/\s*$/g), ''));
console.log("去掉所有空格:" + str.replace(/\s*/g, ''));

LvyYoung avatar Jul 27 '19 08:07 LvyYoung

let str = "as sas qs as A" str.split(" ").toString().replace(/,/g,"")

ab291478089 avatar Aug 06 '19 09:08 ab291478089

function trimStr(str,type){ const regObj={ left: /^\s+/, middle: /(\S)\s+(\S)/g, right:/\s+$/, both: /(^\s+)|(\s+$)/g, all: /\s+/g }; const reg =type && regObj[type] ? regObj[type] :regObj.both; const replaceStr = type === 'middle' ? '$1$2' : ''; return str.replace(reg,replaceStr); } trimStr(' aa bb cc dd ee ','middle');

如果str = 'aa bb c dd ee',运行结果是" aabbc ddee ",不对啊

babygirlhuan8 avatar Aug 09 '19 08:08 babygirlhuan8

function trimStr(str,type){ const regObj={ left: /^\s+/, middle: /(\S)\s+(\S)/g, right:/\s+$/, both: /(^\s+)|(\s+$)/g, all: /\s+/g }; const reg =type && regObj[type] ? regObj[type] :regObj.both; const replaceStr = type === 'middle' ? '$1$2' : ''; return str.replace(reg,replaceStr); } trimStr(' aa bb cc dd ee ','middle');

如果str = 'aa bb c dd ee',运行结果是" aabbc ddee ",不对啊

已修改了,具体产生的原因是正则有问题,原匹配的是‘x x’,但碰到‘x x x’只会取前面的'x x',后面的' x'将跳过

qqdnnd avatar Aug 15 '19 05:08 qqdnnd

去掉中间空格

str.replace(/^(\s+)(.*?)(\s+)$/g,function($0,$1,$2,$3){
	return $1+$2.replace(/(\s+)/g,'')+$3
})

pma934 avatar Aug 22 '19 12:08 pma934

function deleteSpace(str) {
    return str.split("").filter(d => d !== " ").join("");
} 
var str1 = "abc def tfd";
var str2 = "  abc def tfd";
var str3 = "abc def tfd   ";
var str4 = "   abc def tfd   ";
console.log(deleteSpace(str1));
console.log(deleteSpace(str2));
console.log(deleteSpace(str3));
console.log(deleteSpace(str4));

funlee avatar Aug 30 '19 06:08 funlee

function trimString(str, type) {
  let allRegex = {
    left: /^\s+/,
    right: /\s+$/,
    both: /(^\s+)|(\s+$)/g,
    all: /\s+/g
  };
  if (type === "middle") {
    let cacheLeft = str.match(allRegex.left)[0];
    let cacheRight = str.match(allRegex.right)[0];

    return cacheLeft + str.replace(allRegex.all, "") + cacheRight;
  }
  return str.replace(allRegex[type], "");
}
trimString("    asdasd   asd asd   ", "both")

JJL-SH avatar Sep 04 '19 05:09 JJL-SH

/**
 * 移除字符串中特定位置的空格
 * @param {*} str    目标字符串
 * @param {*} direction   目标位置
 * 1,字符串左侧空格
 * 2,字符串右侧空格
 * 3,字符串左右侧空格
 * 4,字符串内部空格
 * 5,字符串内全部空格
 */

function removeSpace(str,direction) {
  if(!str)return ;
  switch (direction) {
    case 1:
      return str.replace(/^\s*/,"");
    case 2:
      return str.replace(/(\s*$)/g,"");
    case 3:
      return str.replace(/^\s*|\s*$/g,"");
    case 4:
      var prefix = str.substr(0,str.match(/^\s*/)[0].length);
      var suffix = str.substr(str.length-str.match(/(\s*$)/g)[0].length,str.length);
      var content = str.replace(/^\s*|\s*$/g,"").replace(/\s*/g,"");
      return prefix+content+suffix;
    default:
      return str.replace(/\s*/g,"");
  }
}

var str = '  adasd  asd dc   ';
console.log(removeSpace(str,1));
console.log(removeSpace(str,2));
console.log(removeSpace(str,3));
console.log(removeSpace(str,4));
console.log(removeSpace(str,5));
console.log(removeSpace(str));

Yulingsong avatar Sep 19 '19 04:09 Yulingsong

function fn(str) { return str.split(' ').join(''); }

Daniel-Fang avatar Sep 19 '19 07:09 Daniel-Fang

const str = ' s t r '
const _POSITION = Object.freeze({
    left: Symbol(),
    right: Symbol(),
    both: Symbol(),
    all: Symbol(),
    center: Symbol()
})
function trim (str, position = 'all') {
    if(!_POSITION.hasOwnProperty(position)) throw new Error('unexpected position value in [left, right, both, all, center]')
    switch(position){
        case ('left'): 
            return str.replace(/^\s+/g, '')
        case ('right'):
            return str.replace(/\s+$/g, '')
        case ('all'): 
            return str.replace(/\s+/g, '')
        case ('both'):
            return str.replace(/^\s+|\s+$/g, '')
        case ('center'):
            let leftSpace = str.match(/^\s+/g)[0]
            let rightSpace = str.match(/\s+$/g)[0]
            return leftSpace + str.replace(/\s+/g, '') + rightSpace

    }
}

console.log(trim(str,'left'))
console.log(trim(str,'right'))
console.log(trim(str,'all'))
console.log(trim(str,'both'))
console.log(trim(str,'center'))

tianfeng65 avatar Sep 23 '19 04:09 tianfeng65

var str = ' abc d e f g ';

function trim(str) { if (typeof str === "string") { // 方案1:正则 var string1 = str.replace(/\s*/g, ""); //去所有空格 var string2 = str.replace(/^\s*/g, ""); //去前空格 var string3 = str.replace(/\s*$/g, ""); //去后空格 var string4 = str.replace(/^\s*|\s*$/g, ""); //去前后空格 var leftSpace = str.match(/^\s*/g); console.log(str.match(/\s*$/g)) var rightSpace = str.match(/\s*$/g[0]); var string5 = leftSpace + str.replace(/\s*/g, "") + rightSpace; //去中间空格 // 方案2:split, join var string = str.split(" ").join(""); //去所有空格 } console.log(string1); console.log(string2); console.log(string3); console.log(string4); console.log(string5); console.log(string); } trim(str)

censek avatar Sep 25 '19 02:09 censek

function delSpace (str, pos) {
  let reg = /\s+/g
  switch (pos) {
    case 'l':
      reg = /^\s+/g
      break
    case 'r':
      reg = /\s+$/g
      break
    case 'c':
      reg = /(?<=\w)\s+(?=\w)/g
      break
    case 'lr':
      reg = /(^\s+)|(\s+$)/g
      break
    case 'a':
      reg = /\s+/g
      break
  }

  return str.replace(reg, '')
}

zepang avatar Sep 25 '19 11:09 zepang

function trim(str, pos) {
    let ret = str
    switch(pos) {
        case 'l':
            ret = str.trimStart()
            break
        case 'r':
            ret = str.trimEnd()
            break
        case 'lr':
            ret = str.trimStart().trimEnd()
            break
        case 'm':
            ret = str.replace(/(?<=[^\s])\s*(?=[^\s])/g, '')
            break
    }
    return ret
}

mopig avatar Sep 29 '19 10:09 mopig

答案亲测,连续空格可以用(比较简便) var str = ' A B CDDD D D '; console.log(str.split(' ').join('')) // 输出"ABCDDDDD"

RQSA avatar Oct 03 '19 21:10 RQSA

function trim(str, position = 'both') {
  if (position === 'left') return str.replace(/^\s*/g, '')
  if (position === 'right') return str.replace(/\s*$/g, '')
  if (position === 'all') return str.replace(/\s*/g, '')
  if (position === 'both') return str.replace(/^\s*|\s*$/g, '')
  return str
}

console.log('|' + trim('   sss ggg  ', 'both') + '|')

diandianzd avatar Oct 10 '19 04:10 diandianzd

function trimStr(str) { return str.split('').filter(item => { return item !== ' '; }).join(''); }

zhoucumt avatar Oct 12 '19 03:10 zhoucumt

/**
 * @param {string} str
 * @param {string} type
 */
function trim(str, type = "all") {
  var regexMap = {
    left: /^\s+/,
    right: /\s+$/,
    center: /(?<=\S)\s(?=\S)/g,
    both: /(^\s+)|(\s+$)/,
    all: /\s/g
  };
  var reg = regexMap[type];
  if (!reg) {
    throw new TypeError("type is invalid");
  }
  return str.replace(regexMap[type], "");
}

0x3c avatar Oct 14 '19 03:10 0x3c

function deleSpac(str, type) {
  let regObj = {
    left: /^\s*/,
    right: /\s*$/,
    both: /^(\s*)|(\s*$)/g,
    middle: /\b\s*\b/g,
    all: /\s+/g
  }
  return str.replace(regObj[type], '');
}
let res = deleSpac('   00abc\t aa 00   ', 'middle');

qqlxxlxx avatar Oct 16 '19 11:10 qqlxxlxx

function trim (str){ return typeof str === 'string' && (str.replace(/\s+/g,'')) } trim(' a b c d e f g ') "abcdefg"

ADengrc avatar Oct 17 '19 09:10 ADengrc

function removeSpache(str, types) {
  let _str = str;
  let _reg = [
    /^[\s]+/g,
    /([\s]*)$/g,
    /\b\s*\b/g
  ]

  let _type = parseInt(types, 2);
  let i = 0;
  while(_type) {
    if (_type !== _type >> 1 << 1) {
      // 执行指定方法
      _str = _str.replace(_reg[i], '')
    }

    i++
    _type = _type >> 1;
  }

  return _str;
}

//   1 去掉开头空格
//  10 去掉结尾空格
// 100 去掉中间空格
// 110 去掉中间和结尾空格
// 111 去掉所有空格
console.log(removeSpache(' asdas  asda sd       ', 101))

a1444942531 avatar Oct 31 '19 08:10 a1444942531

String.prototype.removeSpace = function() { return this.split(' ').join('') }

007304wz avatar Nov 13 '19 07:11 007304wz

function removeSpace(str){ return str.replace(/\s+/g,''); }

mosesyoung avatar Nov 15 '19 13:11 mosesyoung

var mytrim  = function(str){
    var reg = /\s+/g
    var res = str.replace(reg,'')
    return res
}

console.log(mytrim(' Abba bs e s  '))

Lanbasara avatar Nov 18 '19 04:11 Lanbasara

function trim(str, {
    start = true,
    middle = false,
    end = true,
}) {
    if (!start && !middle && !end) return str;
    if (middle) {
        const SPACE = ' ';
        const len = str.length;

        let i = 0;
        let j = len - 1;

        while(str[i] === SPACE) i++;
        while(str[j] === SPACE) j--;

        // 全空
        if (j < i) return start || end ? '' : str;

        str = str.replace(/\s+/g, '');
        const prefix = start ? '' : SPACE.repeat(i + 1);
        const postfix = end ? '' : SPACE.repeat(len - 1 - j);
        return `${prefix}${str}${postfix}`;
    }

    if (start) str = str.replace(/^\s+/, '');
    if (end) str = str.replace(/\s+$/, '');
    return str;
}

huanguolin avatar Nov 20 '19 15:11 huanguolin

str.split(' ').join('')

cxyxiaoyuyu avatar Nov 25 '19 01:11 cxyxiaoyuyu

const str = '  s t  r  '

const POSITION = Object.freeze({
  left: Symbol(),
  right: Symbol(),
  both: Symbol(),
  center: Symbol(),
  all: Symbol(),
})

function trim(str, position = POSITION.both) {
  if (!!POSITION[position]) throw new Error('unexpected position value')
  
  switch(position) {
      case(POSITION.left):
        str = str.replace(/^\s+/, '')
        break;
      case(POSITION.right):
        str = str.replace(/\s+$/, '')
        break;
      case(POSITION.both):
        str = str.replace(/^\s+/, '').replace(/\s+$/, '')
        break;
      case(POSITION.center):
        while (str.match(/\w\s+\w/)) {
          str = str.replace(/(\w)(\s+)(\w)/, `$1$3`)
        }
        break;
      case(POSITION.all):
        str = str.replace(/\s/g, '')
        break;
      default: 
  }
  
  return str
}

const result = trim(str)

console.log(`|${result}|`) //  |s t  r| 

抛出错误那一行,多了一个!

nikolausliu avatar Nov 26 '19 02:11 nikolausliu

function myTrim(str, type = 'all') { switch (type) { case "all": return str.replace(/\s*/g, '') break; case "left": return str.replace(/^\s*/, '') break; case "right": return str.replace(/\s*$/, '') break; case "double": return str.replace(/^\s*|\s*g/g, '') break; default: break; } }

13714273163 avatar Nov 29 '19 09:11 13714273163

function removeSpace(str) {

  let arr =str.split(' ');
  str =arr.join('');
  return str;
}
let str ='    abc    sdef dwffr defr';
console.log(removeSpace(str));

l5769389 avatar Dec 14 '19 01:12 l5769389

function trim(str, type) {
    var t = type || "all";
    var map = {
        all: /\s+/g, //  去除字符串所有空格   \s空白字符串   g 修饰符 表示 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
        before: /^\s*/, //  去除字符串前面的空格      \s空白字符串   ^\s表示 以 空白字符串开头  *表示 匹配任何包含零个或多个 n 的字符串。
        after: /\s*$/,//去除字符串 后面的空格  \s空白字符串   \s$表示以空白字符串结尾      *表示 匹配任何包含零个或多个 n 的字符串。
        beforeAndAfter: /^\s*|\s*$/g,// 去除字符串 前后的空格    |表示 或的意思
    };
    if (map[t]) {
        return str.replace(map[t], '');
    } else {
        throw  "传入的类型错误";
    }

}

这样可以不用 switch if 之类的

crazyming9528 avatar Dec 16 '19 06:12 crazyming9528

function myTrim (str){ return str.replace(/\s+/g, "") }

yyz841875845 avatar Dec 18 '19 03:12 yyz841875845

function trim(str) {
  return str.split(" ").join("");
}
function trim(str) {
  return str.replace(/\s/g, "");
}
var str = " 123  31 12  412 4  ";
console.log(trim(str));

YeChang avatar Dec 22 '19 06:12 YeChang

//Dindex = 去掉哪个位置的空格 -1=所有 0=前边 1=后边 2=当间
function DNfun(str, Dindex) {
	let newStr = '' //新搞个变量存着
	let newArr = str.split(' ') //啥也不管先分割成数组
	if (Dindex == 1) { //后边特殊搞一下子
		Dindex = newArr.length - 2 // 数组最大-1就是最后一个空格出现的地方
	}
	if (Dindex == 2) { //当间特殊搞一下子
		Dindex = Math.floor((newArr.length - 1) / 2) //数组最大除2就是中间 舍去小数点
	}
	//开整
	newArr.forEach((item, index) => {
		if (index == Dindex) {
			newStr += item + ' '
		} else {
			newStr += item
		}
	})
	return newStr
}
console.log(DNfun('野 狼 D i s c o !', -1), '-1 全场动作必须跟我整齐划一')
console.log(DNfun('野 狼 D i s c o !', 0), '0 来左边跟我一起划个龙')
console.log(DNfun('野 狼 D i s c o !', 1), '1 右边画一道彩虹')
console.log(DNfun('野 狼 D i s c o !', 2), '2 中间再比划一个郭富城')

qq814927478 avatar Jan 02 '20 02:01 qq814927478

function trim (str){
return str.replace(/\s+/g,"");
}

chengazhen avatar Jan 03 '20 07:01 chengazhen

方法一:正则str = str.replace(/\s*/g,""); 方法二:字符串方法str=str.split(' ').join('') 方法三:str.trim()方法str= str.trim()

wxawxa avatar Feb 01 '20 10:02 wxawxa

function filterSpace(str) { let c = []; str.split(' ').map(v => { v !== '' ? c.push(v) : ''; }); return c.join('') }

var a = ' ncjkdsa f,j832 1j f234f3 '; console.log(filterSpace(a))

好多回答的函数我见都没见过。。。

zzfc avatar Feb 18 '20 09:02 zzfc

var str = 'sdfs sdf sd sd ';
var func = function(str){
  var strList = str.split(' ');
  return strList.join();
}
func(str);//sdfssdfsdsd

wowsunny avatar Feb 24 '20 14:02 wowsunny

var trim = function(str){ return str.replace(/\s*/g,""); } str.replace(/\s*/g,""); //去除字符串内所有的空格 str.replace(/^\s*|\s*$/g,""); //去除字符串内两头的空格 str.replace(/^\s*/,""); //去除字符串内左侧的空格 str.replace(/(\s*$)/g,""); //去除字符串内右侧的空格

' sadfa adf asdfasd asdfa '.replace(/(?<=\S)\s*(?=\S)/g,'');加一个这完美,只去中间的

loveWebloveLive avatar Mar 09 '20 15:03 loveWebloveLive

str.replace(/(\u00A0|\u0020|\u3000)+/g,"")

不间断空格:\u00A0 半角空格:\u0020 全角空格:\u3000

PanPanZhangCode avatar Mar 10 '20 07:03 PanPanZhangCode

// 写一个方法去掉字符串中的空格,要求传入不同的类型分别能去掉前、后、前后、中间的空格
var str = "    hah  hha "
// 这里简化参数:前=>1  后=>2 前后=>3  中间=>4
function strTrim(val, place) {
  if (place == 3) str = val.trim()
  if (place == 1) str = val.trimStart()
  if (place == 2) str = val.trimEnd()
  if (place == 4) {
    var start = "",
      end = ""
    for (const n of str) {
      if (n != " ") break
      start += " "
    }
    for (const n of str.split("").reverse().join("")) {
      if (n != " ") break
      end += " "
    }
    var center = str.split(" ").join("")
    str = start + center + end
  }
  return str
}
strTrim(str, 4)

rennzhang avatar Mar 11 '20 09:03 rennzhang

str.replace(' ','')


str.replace(/\s+/,'')

Jvid avatar Mar 13 '20 00:03 Jvid

var str = '  a b c  d e  f g  ';

function removeSpace(value, type) {
    var headPattern = /^\s+/g;
    var tailPattern = /\s+$/g;
    var headAndTailPattern = /^\s+|\s+$/g;
    var middlePattern = /(\S)\s+(\S)/g;
    var pattern = /\s+/g;

    if (type === 'head') {
        return value.replace(headPattern, '');
    } else if (type === 'tail') {
        return value.replace(tailPattern, '');
    } else if (type === 'head_and_tail') {
        return value.replace(headAndTailPattern, '');
    } else if (type === 'middle') {
        while (middlePattern.exec(value)) {
            value = value.replace(middlePattern, '$1$2');
        }
        return value;
    } else {
        return value.replace(pattern, '');
    }
}

xiaoyucoding avatar Mar 17 '20 09:03 xiaoyucoding

str.replace(/\s/g, '')

makejun168 avatar Mar 20 '20 09:03 makejun168

var str = ' 1 2 3445 6    ';
console.log(str.split(' ').join('')) // 输出"1234456"

这样不是很简单吗 @haizhilin2013

这个如果遇到连续的空格呢

var str = '  12 33'
var newstr = "";
var strs = str.split(" ")
for(i = 0;i < strs.length; i++){
  if(strs[i]) {newstr += strs[i];console.log(strs[i])}
}

WindSoftdzw avatar Mar 28 '20 05:03 WindSoftdzw

`function foo(str) { return str.split(" ").join("") }

function lee(str){ return str.replace(/ /g,"") }`

houxinyu-neu avatar Apr 18 '20 13:04 houxinyu-neu

  1. 去全部 str.split(" ").join('')
  2. 去头尾 str.trim()
  3. 去头 str.replace(/^\s+/, '')
  4. 去尾 str.replace(/(\s+$)/, '')

xuzhouchen1104 avatar Apr 24 '20 03:04 xuzhouchen1104

function fn(n) {
    return n.replace(/\s*/g, '')
}

giggleCYT avatar May 27 '20 13:05 giggleCYT

var str = ' |ac| bcd |'
console.log(str.replace(/\s*/g, ""))
console.log(str.split(' ').join(''))

v1kt0r820 avatar Jun 04 '20 09:06 v1kt0r820

let str = ' what are you nong sha lie '; let arr = str.split(''); let noSpaceArr = arr.filter(function(item){ return item != ' '; }) str = noSpaceArr.join(''); console.log(noSpaceArr);

Sang-Sang33 avatar Jun 22 '20 06:06 Sang-Sang33

const str = ' go  od ';

function fun(str, position) {
    let newStr;
    const len = str.length;
    switch (position) {
        case 'left':
            newStr = str.slice(1);
            break;
        case 'right':
            newStr = str.slice(0, len);
            break;
        case 'both':
            newStr = str.slice(1, len);
            break;
        case 'middle':
            newStr = str.split(' ').join('');
            break;
    }
    return newStr;
}

console.log(fun(str, 'left'));
console.log(fun(str, 'right'));
console.log(fun(str, 'both'));
console.log(fun(str, 'middle'));

ooceann avatar Jun 23 '20 16:06 ooceann

function deleteSpace(str1){

        var str3='';
        var j=0;
        for(var i=0;i<str1.length;i++)
        {
            if(str1[i]==" ")
            {
                continue;
            }
            str3+=str1[i];
        }
        return str3;
    }
    var str4=deleteSpace("ab cd");
    console.log(str4);

Pvtwen avatar Jul 01 '20 06:07 Pvtwen

var str=' a b c ' ; var arr=Array.from(new Set(str.split(""))).filter(item=>item&&item.trim()); str=arr.join("")

code521 avatar Jul 02 '20 01:07 code521

此题需要限定“空格”具体指代。\s 正则(以及 trim()),指代的“空白字符”,包含制表符、回车、换行等等。

方法

/**
 * 去除空格。只支持 `' '`、`'\u0020'` 空格去除。
 * @param {string} str 需要去除空格的字符串
 * @param {('start'|'middle'|'end'|'all')} position 去除空格的位置
 */
function removeSpace (str, position = 'all') {
  const reg = ({
    start: /^\u0020/gu,
    end: /\u0020$/gu,
    middle: '不会,欢迎补充',
    all: /\u0020/gu
  })[position];
  return (reg && str && typeof str === 'string') ? str.replace(reg, '') : str;
}

另,用正则未必是性能最好的,见《JavaScript 忍者秘籍》165 页。

示例

var str = " Remove  Space \f\n\v\t\ufeff\u00a0Remove\u0020Space\u2002\u2003\u0009\u000b\u000c ";
console.log(`input length: ${str.length}`);
console.log(`input: ${str}`);
console.log(`input.replace(/\\s/g, ''): ${str.replace(/\s/g, '')}\n\n`);
console.log(`input.split(' ').join(''): ${str.split(' ').join('')}\n\n`);

['all', 'start', 'end', 'unknown']
.forEach(position => {
  const output = removeSpace(str, position);
  console.log(`remove ${position}:`);
  console.log(`output length: ${output.length}`);
  console.log(`output: ${output}\n\n`);
});

20200702155226

参考

  1. String.prototype.trim()
  2. https://keycode.info/
  3. JS: Whitespace Characters
  4. JavaScript: Unicode space character

HereChen avatar Jul 02 '20 07:07 HereChen

学习了 感谢指导!

------------------ 原始邮件 ------------------ 发件人: "陈磊"<[email protected]>; 发送时间: 2020年7月2日(星期四) 下午3:54 收件人: "haizlin/fe-interview"<[email protected]>; 抄送: "北葵向暖"<[email protected]>; "Comment"<[email protected]>; 主题: Re: [haizlin/fe-interview] [js] 第2天 写一个方法去掉字符串中的空格 (#6)

此题需要限定“空格”具体指代。\s 正则(以及 trim()),指代的“空白字符”,包含制表符、回车、换行等等。

方法 /** * 去除空格。只支持 ' ''\u0020' 空格去除。 * @param {string} str 需要去除空格的字符串 * @param {('start'|'middle'|'end'|'all')} position 去除空格的位置 */ function removeSpace (str, position = 'all') { const reg = ({ start: /^\u0020/gu, end: /\u0020$/gu, middle: '不会,欢迎补充', all: /\u0020/gu })[position]; return (reg && str && typeof str === 'string') ? str.replace(reg, '') : str; }

另,用正则未必是性能最好的,见《JavaScript 忍者秘籍》165 页。

示例 var str = " Remove Space \f\n\v\t\ufeff\u00a0Remove\u0020Space\u2002\u2003\u0009\u000b\u000c "; console.log(input length: ${str.length}); console.log(input: ${str}); console.log(input.replace(/\\s/g, ''): ${str.replace(/\s/g, '')}\n\n); console.log(input.split(' ').join(''): ${str.split(' ').join('')}\n\n); ['all', 'start', 'end', 'unknown'] .forEach(position => { const output = removeSpace(str, position); console.log(remove ${position}:); console.log(output length: ${output.length}); console.log(output: ${output}\n\n); });

参考

String.prototype.trim()

https://keycode.info/

JS: Whitespace Characters

JavaScript: Unicode space character

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

code521 avatar Jul 02 '20 07:07 code521

function removeStrEndSpace (str) { // 去掉末尾的空字符串 return str.replace(/\s$/g, ''); // 去掉行首的空字符串 return str.replace(/^\s*/g, ''); // 去掉所有字符串 return str.replace(/\s/g, ''); }

Alex-Li2018 avatar Jul 24 '20 08:07 Alex-Li2018

const ENUM_TYPE = {
  left: Symbol(),
  right: Symbol(),
  mid: Symbol(),
  both: Symbol()
}

const trim = (str, position = ENUM_TYPE.both) => {
  switch (position) {
    case (ENUM_TYPE.left):
      str = str.replace(/^\s+/, '')
      break
    case (ENUM_TYPE.right):
      str = str.replace(/\s+$/, '')
      break
    case (ENUM_TYPE.mid):
      while (str.match(/\w\s+\w/)) {
        str = str.replace(/(\w)(\s+)(\w)/, `$1$3`)
      }
      break
    case (ENUM_TYPE.both):
      str = str.replace(/^\s+/, '').replace(/\s+$/, '')
      break    
  }

  return str
}
const str = ' hfdh kfjdsh '
const res = trim(str)
console.log(res)

m7yue avatar Oct 10 '20 08:10 m7yue

function stringTrim(str) { return str.split("").filter(item => { if(item !== " " && item !== "") { return item; } }

yangyi1987 avatar Nov 16 '20 02:11 yangyi1987

function trimer (str, position) {
  switch (position) {
    case 'start': return str.trimStart()
    case 'end': return str.trimEnd()
    case 'center': return str.replace(/(?<=\S)\s+(?=\S)/g, '')
    case 'all': return str.replace(/\s/g, '')
    case 'normal':
    default:
      return str.trim()
  }
}

babycannotsay avatar Nov 29 '20 04:11 babycannotsay

let str = ' jjs jsjsj jsj s ' // str=str.trim() //去掉两边 str = str.replace(/\s/g, '') //去掉全部

iceCream0311 avatar Dec 21 '20 06:12 iceCream0311

    const str = ' s t  r  ';

    const POSITION = {
      left: 'left',
      right: 'right',
      both: 'both',
      center: 'center',
      all: 'all'
    };

    function trim (str, position) {
      // 判断position的值,默认为both
      let pos = position && POSITION[position] ? position : 'both';
      
      switch(pos) {
        case(POSITION.left):
          str = str.replace(/^\s+/, '');
          break;
        case(POSITION.right):
          str = str.replace(/\s+$/, '');
          break;
        case(POSITION.both):
          str = str.replace(/^\s+|\s+$/g, '');
          break;
        case(POSITION.center):
          while (str.match(/\w\s+\w/)) {
            str = str.replace(/(\w)(\s+)(\w)/, `$1$3`);
          }
          break;
        case(POSITION.all):
          str = str.replace(/\s/g, '');
          break;
        default:
      }
      
      return str;

    }

    const result = trim(str);

    console.log(`|${result}|`);

davidandnick avatar Dec 22 '20 05:12 davidandnick

export enum TrimType {
  LEADING,
  TRAILING,
  MIDDLE,
  ALL,
}

export function trim(str: string, type: TrimType) {
  switch (type) {
    case TrimType.LEADING:
      return str.replace(/^\s+/, "");
    case TrimType.TRAILING:
      return str.replace(/\s+$/, "");
    case TrimType.MIDDLE:
      while (str.match(/\w+\s+\w+/)) {
        str = str.replace(/(\w+)\s+(\w+)/, "$1$2");
      }
      return str;
    case TrimType.ALL:
      return str.replace(/\s+/g, "");
  }
}

// test
const str = "  hello wor ld  ";

console.log(trim(str, TrimType.ALL));
console.log(trim(str, TrimType.LEADING));
console.log(trim(str, TrimType.TRAILING));
console.log(trim(str, TrimType.MIDDLE));

/**
  helloworld
hello wor ld  
  hello wor ld
  helloworld  
 */

zebratt avatar Jan 13 '21 12:01 zebratt

借鉴了大佬们的写法 ^ _ ^

    function Trim (str) {
      this.str = str
    }

    Trim.prototype = {
      left () {
        return this.str.replace(/^\s*/, '')
      },
      right () {
        return this.str.replace(/\s*$/, '')
      },
      all () {
        return this.str.replace(/\s/g, '')
      },
      interval () {
        return this.str.replace(/(?<=\w)\s(?=\w)/g, '')
      }
    }

    const str = '   fs fs sa     '
    const trim = new Trim(str)
    
    console.log('l->' + trim.left() + '<-r');
    console.log('l->' + trim.right() + '<-r');
    console.log('l->' + trim.all() + '<-r');
    console.log('l->' + trim.interval() + '<-r');

luneShaoGM avatar Jan 15 '21 06:01 luneShaoGM

function trim(str, position = 'both') {
    if (typeof position !== 'string') {
        throw new Error('expected position is string type')
    }
    switch (position) {
        case 'left':
            str = str.replace(/^\s+/, '');
            break;
        case 'right':
            str = str.replace(/\s+$/, '');
            break;
        case 'both':
            str = str.replace(/^\s+/, '').replace(/\s+$/, '');
            break;
        case 'center':
            while (str.match(/(\w)(\s+)(\w)/g, `$1$3`)) {
                str = str.replace(/(\w)(\s+)(\w)/g, `$1$3`);
            }
        case 'all':
            str = str.split(' ').join('');
            break;
    }
    return str;
}
console.log(trim(' 1 2 3 ', 'all'));

zhengbiaofeng avatar Jan 16 '21 04:01 zhengbiaofeng

感觉没什么正确答案啊,好多人没看懂题。。。

function rmEmpty(str, dir) {
    const regObj = {
        left: /^\s+/,
        middle: /(?<=\S)\s+(?=\S)/g,
        right: /\s+$/,
        both: /^\s+|\s+$/g
    };
    return str.replace(regObj[dir], '');
}

ShaneQin avatar Jan 16 '21 05:01 ShaneQin

建议配置项做成数组列表 输入一个列表来控制要消除的位置更好发自我的iPhone------------------ 原始邮件 ------------------发件人: ShaneQin [email protected]发送时间: 2021年1月16日 13:43收件人: haizlin/fe-interview [email protected]抄送: 林水泉 [email protected], Comment [email protected]主题: 回复:[haizlin/fe-interview] [js] 第2天 写一个方法去掉字符串中的空格 (#6) 感觉没什么正确答案啊,好多人没看懂题。。。 function rmEmpty(str, dir) { const regObj = { left: /^\s+/, middle: /(?<=\S)\s+(?=\S)/g, right: /\s+$/, both: /^\s+|\s+$/g }; return str.replace(regObj[dir], ''); }

—You are receiving this because you commented.Reply to this email directly, view it on GitHub, or unsubscribe. [ { "@context": "http://schema.org", "@type": "EmailMessage", "potentialAction": { "@type": "ViewAction", "target": "https://github.com/haizlin/fe-interview/issues/6#issuecomment-761464454", "url": "https://github.com/haizlin/fe-interview/issues/6#issuecomment-761464454", "name": "View Issue" }, "description": "View this Issue on GitHub", "publisher": { "@type": "Organization", "name": "GitHub", "url": "https://github.com" } } ]

Cillivian avatar Jan 16 '21 08:01 Cillivian

Regex: string.replace(/\s/g, '') join: string.split(' ').join(' ')

crush2020 avatar Jan 20 '21 01:01 crush2020

str.split(' ').join('')

Aizener avatar Jan 21 '21 12:01 Aizener

let str = ' 12 12 ';
function rmSpace(str) {
   return str.replace(/\s/g, '')
}

fanerge avatar Jan 22 '21 06:01 fanerge

var str = '   123  123   ';
function replaceSpace(str) {
    // 由于正则默认使用贪婪模式,会在每次匹配中匹配所有连续的空格
    return str.replace(/\s/g, '')
    // 紧跟在任何量词 *、 +、? 或 {} 的后面再添加一个 ? ,将会使量词变为非贪婪(匹配尽量少的字符)
    // return str.replace(/\s*?/g, '')
}

fanerge avatar Jan 22 '21 06:01 fanerge

let str = ' 1x dsa2 d sd sda ' str.split(' ').join('') //"1xdsa2dsdsda"

zfing avatar Feb 04 '21 07:02 zfing

去除中间空格 ' a v c '.replace(/\b(\S+)\s+\b/g,"$1");

si19891002 avatar Feb 07 '21 07:02 si19891002

var str = '1 2 3 4 5 6 ' console.log( str.split( ' ' ).join( ' ' ) )

Gun-yx avatar Feb 22 '21 22:02 Gun-yx

let str = 'a aa a a ' str.split(' ').join('') str.replace(/\s*/g,'')

lwt09 avatar Mar 15 '21 14:03 lwt09