在trim()之后获取字符串的最后一个字符不起作用

时间:2019-06-10 09:40:21

标签: javascript

如何从字符串中删除空格以获取最后一个字符?

const email = "abc@";
const emailWhiteSpace = "abc@ ";
console.log(email.trim()[email.length - 1]) //==> @
console.log(emailWhiteSpace.trim()[emailWhiteSpace.length - 1]) //==> undefinied

有什么办法解决这个问题吗?

6 个答案:

答案 0 :(得分:5)

使用正则表达式可能会更容易-匹配一个非空格字符,然后是空格字符,然后是行尾($):

const lastChar = str => str.match(/(\S)(?=\s*$)/)[1];
console.log(lastChar("abc@"));
console.log(lastChar("abc@ "));

当然,您也可以将修剪后的文本保存在变量中:

const lastChar = str => {
  const trimmed = str.trim();
  return trimmed[trimmed.length - 1];
};
console.log(lastChar("abc@"));
console.log(lastChar("abc@ "));

答案 1 :(得分:4)

访问长度时,还需要参考修剪后的字符串:

const email = "abc@";
const emailWhiteSpace = "abc@ ";
console.log(email.trim()[email.length - 1]) //==> @
console.log(emailWhiteSpace.trim()[emailWhiteSpace.trim().length - 1])
//                                               ^^^^^^^^

但是,一种更好的方法(首先避免了您的错误)是将修剪后的字符串分配给实际变量:

var emailWhiteSpace = "abc@ ";
var emailWhiteSpaceTrimmed = emailWhiteSpace.trim();
console.log(emailWhiteSpaceTrimmed[emailWhiteSpaceTrimmed.length - 1])

答案 2 :(得分:2)

那是因为emailWhiteSpace.trim()并没有改变字符串,它返回了一个新的字符串,这意味着emailWhiteSpace.trim().lengthemailWhiteSpace.length是不同的。

答案 3 :(得分:0)

您可以使用trimEnd()修剪最后一个空格。

const emailWhiteSpace = "abc@ ";
console.log(emailWhiteSpace.trimEnd()[emailWhiteSpace.trimEnd().length-1])

/*
  You can also use a separate variable 
*/
const trimmedEmail = emailWhiteSpace.trimEnd();
console.log(trimmedEmail[trimmedEmail.length-1]);

答案 4 :(得分:0)

您将修剪件放在错误的位置。应该是

emailWhiteSpace[emailWhiteSpace.trim().length - 1] //-> "@"

这是因为emailWhiteSpace.length返回未修饰的字符串(带有空格)。因此,您可以将修整结果分配给某个变量,或者将其放入索引器中,如图所示。这取决于您要实现的目标。

答案 5 :(得分:0)

我的会是..

const email = "abc@";
const emailWhiteSpace = "abc@ ";

const f = function( v) { v = String(v); return v[v.length-1]};

console.log( f( email.trim())) //==> @
console.log( f( emailWhiteSpace.trim())) //==> @