2012-12-06 29 views
0

我的代碼:來獲取在具有特定的特殊字符作爲其最後一個字母的單詞

我嘗試下面的代碼

var str = "Have fun storming the castle!" 
var character = "!"; 

function endsWith(str, character) { 
    return str.indexOf(character, str.length - character.length) !== -1; 
} 

alert(endsWith(str, character)); 

這是給結果作爲True因爲這樣的詞存在於這句話。

但我需要的結果爲castle!,因爲它是唯一一個具有這樣的字符atlast的單詞。如果有多個具有這種特徵的詞,我需要這些詞。

回答

2

下面的函數接受字符串和字符,並返回以字符作爲其最後一個字符的單詞數組。它是區分大小寫的,但如果你想讓它不區分大小寫,那麼只需在對比行中加上.toLowerCase()即可。

function getWords(str, character) 
{ 
    var words = str.split(" "); 
    var result = []; 

    for(var i=0; i<words.length; i++) 
    { 
     if(words[i].slice(-1) == character) 
     { 
      result.push(words[i]); 
     } 
    } 

    return result; 
} 

var str = "Have fun storming the castle!"; 
var character = "!"; 

console.log(getWords(str, character)); 

輸出

[ 「城堡!」]

多個單詞測試:

console.log(getWords("Have fun storming! the castle!", "!")); 

輸出

[ 「強攻!」, 「城堡!」]

jsFiddle Demo

+0

我試過了上面的函數,但它返回null,因爲它甚至沒有輸入if條件,因爲它比較每個單詞的第一個字符與該字符。 – User1674987

+0

@universal我認爲你錯了。這是有效的,因爲substr(-1,1)返回單詞的最後一個字符,而不是第一個字符。 – MrCode

+0

@universal查看jsFiddle演示以顯示它的工作原理(我已更改爲for循環來修復chrome問題)。它在IE瀏覽器和Firefox中工作。 – MrCode

0

你想使用正則表達式。如果你將它定義爲「全球性」,它會給你所有比賽的名單:

function endsWith (str, character) { 
    regexp = new RegExp ('\\b.*?' + character + '\\b', 'g'); 
    return str.match (regexp); 
} 

然而,使其非常好的,你應該確保字符轉義,因此它不能搞砸你的正則表達式:

function escape (character) { 
    int num = character.charCodeAt (0); 
    String code = '000' + num.toString (16); 
    return '\\u' + code.substring (code.length - 4); 
} 

function endsWith (str, character) { 
    regexp = new RegExp ('\\b.*?' + escape (character) + '\\b', 'g'); 
    return str.match (regexp); 
} 
1
var str = "Have fun storming! the castle!" 
var character = "!"; 

function getWords(str, character) 
{ 
    var words = str.split(" "); 
    var result = []; 

    for(var i in words) 
    { 
     //if(words[i].search(character)!="-1") 
     if(words[i].substring(words[i].length-1)==character) 
     { 
      result.push(words[i]); 
     } 
    } 

    return result; 
} 

alert(getWords(str, character)); 

如果字符串是 「玩得開心突襲了這座城堡!」。然後它返回

城堡!

如果字符串是「玩得開心!突襲!城堡!」。然後它返回

猛攻!,城堡!

+0

當特殊字符在單詞的最後時,我想要結果。即使特殊字符位於中間,您的代碼也會顯示這些字詞。 – User1674987

+0

我剛剛編輯了我的代碼。你可以看到改變的 - 如果循環 - 這會給你什麼是必需的。 –

+0

'+ 1'是的,它按預期正常工作。另外,'if(character === words [i] .charAt(words [i] .length - 1))'會給我們預期的結果。謝謝。 – User1674987

相關問題