2014-01-21 73 views
1

我試圖找到字符串的前2個字符是否包含使用子字符串的換行符,但出於某種原因,我是預期的結果。爲什麼沒有子字符串函數返回換行符( n)

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

爲什麼我在使用子字符串函數時沒有得到結果?

+0

由於前2個字符是新行,因此它需要2個字符,所以它substr(0,2)==「\ n \ n」 –

+0

xyz.substring(0,2)將返回2個新行。 – suren

回答

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

這是因爲換行字符正是 - 一個字:

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

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

1

\ n實際只有一個字符。嘗試使用:

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

您正在使用substring(0, 2),這會創建一個字符串長字符串。
因此,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'); 
} 

均可以得到相同的結果,選擇你認爲看起來更好的一個,性能差異太小的考慮,但第二個是快一點點。

相關問題