shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.92k stars 508 forks source link

【Q649】如何去除字符串首尾空白字符 #667

Open shfshanyue opened 3 years ago

shfshanyue commented 3 years ago

实现一个 trim 函数,如同原生的 Array.prototype.trim,以下有两个测试用例

//=> hello
'    hello   '.trim()

//=> hello
'    hello   \t\n'.trim()
shfshanyue commented 3 years ago

在正则表达式中,\s 指匹配一个空白字符,包括空格、制表符、换页符和换行符。等价于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]

const trim = str => str.trim || str.replace(/^\s+|\s+$/g, '')
heretic-G commented 3 years ago
function trim (str = '') {
    str = String(str)
    let left = 0
    let right = str.length - 1
    while (/\s/.test(str[left]) && left < right) {
        left += 1
    }

    while (/\s/.test(str[right]) && left < right) {
        right -= 1
    }
    return str.slice(left, right + 1)
}
createhappymemoryforlife commented 2 years ago
const trim = str => str.trim || str.replace(/^\s+|\s+$/g, '')

const trim = str => str.trim?.() || str.replace(/^\s+|\s+$/g, '')

yxw007 commented 1 year ago
function trim() {
    let str = this;
    let len = str.length;
    if (len <= 0) {
        return str;
    }

    let l = 0;
    let r = str.length - 1;

    while (l <= r) {
        if (str[l] == " ") {
            l++;
        }
        if (str[r] == " ") {
            r--;
        }
        if (str[l] != " " && str[r] != " ") {
            break;
        }
    }

    let res = str.slice(l, r + 1);
    return res;
}

String.prototype.trim = trim;

let s = "  123";
console.log(s.trim().length);

let s1 = "123 ";
console.log(s1.trim().length);

let s2 = " ";
console.log(s2.trim().length);

let s3 = "";
console.log(s3.trim().length);