【问题标题】:To get the words that are having the particular special character as its last letter获取具有特定特殊字符作为其最后一个字母的单词
【发布时间】:2012-11-24 07:22:03
【问题描述】:

我的代码:

我尝试了以下代码

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! 的结果,因为它是唯一具有此类字符的单词。如果多个单词也具有这样的字符,我需要这些单词。

【问题讨论】:

    标签: javascript dom-events javascript-framework


    【解决方案1】:

    下面的函数接受字符串和字符,并返回以该字符为最后一个字符的单词数组。它区分大小写,但如果您想让它不区分大小写,只需将.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

    【讨论】:

    • 我尝试了上面的函数,但它返回 null 因为它甚至没有进入 if 条件,因为它正在将每个单词的第一个字符与字符进行比较。
    • @universal 我认为你错了。这是因为 substr(-1, 1) 返回单词的最后一个字符,而不是第一个字符。
    • @universal 看一下 jsFiddle 演示以展示它的工作原理(我更改为 for 循环来解决 chrome 的问题)。它适用于 IE Chrome 和 Firefox。
    • 非常感谢。按预期工作正常。我正在使用铬。
    • IE 中,它正在发出警报,但没有任何结果。我改变了一点如下在IEfor(var i in words) { if(words[i].match("!")) { if(character === words[i].charAt(words[i].length - 1)) result.push(words[i]); } }工作
    【解决方案2】:

    您想使用正则表达式。如果您将其定义为“全局”,它将为您提供列表中的所有匹配项:

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

    【讨论】:

      【解决方案3】:
      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));
      

      如果字符串是“玩得开心冲进城堡!”。然后它返回

      城堡!

      如果字符串是“玩得开心冲锋!城堡!”。然后它返回

      风暴!城堡!

      【讨论】:

      • 我想要那个特殊字符是单词最后的结果。即使特殊字符在中间,您的代码也会给出单词。
      • 我刚刚编辑了我的代码。您可以看到更改后的 -if 循环。这将为您提供所需的内容。
      • +1 是的,它按预期工作正常。此外,if(character === words[i].charAt(words[i].length - 1)) 会给我们预期的结果。谢谢。
      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2020-11-19
      相关资源
      最近更新 更多