为什么子串函数不返回换行符(\ n)

时间:2014-01-21 15:47:16

标签: javascript

我试图找到一个字符串的前两个字符是否包含使用子字符串的换行符,但由于某种原因我是预期的结果。

var xyz= '\n\nsomething';
if(xyz.substring(0,2)=='\n'){
   alert('found');  //expected result
}else{
   alert('not found');  //actual result
}

但如果我使用正则表达式,那么我得到正确的结果。

var xyz= '\n\nsomething';
if(xyz.substring(0,2).match(/\n/)){
   alert('found');  //actual result and this is correct
}else{
   alert('not found');
}

为什么我在使用子字符串函数时没有得到结果?

4 个答案:

答案 0 :(得分:4)

您从xyz.substring(0, 2)获得的字符串不是"\n",而是"\n\n"

当您使用转义序列\n时,它将最终作为字符串中的单个字符,而不是单独的字符\n

如果您要查找第一个字符,请使用1作为长度:

if (xyz.substring(0,1) == '\n') {

如果要匹配前两个字符,请在字符串中输入两个字符:

if (xyz.substring(0,2) == '\n\n') {

答案 1 :(得分:1)

那是因为换行符字符就是 - 一个字符:

var xyz= '\n\nsomething';
if (xyz.substring(0, 1) == '\n'){
   alert('found');
} else {
   alert('not found');
}

示例: http://jsfiddle.net/M54D3/

答案 2 :(得分:1)

\ n实际上只有一个字符。尝试使用:

xyz.substring(0,1)=='\n'

答案 3 :(得分:0)

您正在使用substring(0, 2),这会创建一个 2 -characters-long字符串。
因此,if (xyz.substring(0,2) == '\n') {将无法匹配'\n\n' != '\n'

相反,请尝试使用正则表达式,或包含

// regex
// \n in first character, or \n in second character, no need to substring
if(xyz.match(/^(\n|.\n)/)) {
   alert('found');
} else{
   alert('not found');
}

// contains
if(xyz.substring(0,2).contains('\n')) {
   alert('found');
} else{
   alert('not found');
}

两者都给出相同的结果,选择你认为看起来更好的一个,性能差异太小而不能考虑,但第二个更快一点。