【问题标题】:Split String into Array of Words to find Longest将字符串拆分为单词数组以查找最长的单词
【发布时间】:2015-06-27 21:32:15
【问题描述】:

我正在执行一项任务,即在任何给定的字符串中搜索最长的单词。我认为理想的方法是将字符串拆分为一个由每个单词组成的数组,然后遍历该数组并比较每个长度以返回最长的。我坚持只是将字符串分成一组单词。我所看到的在主题上回答类似的问题似乎对如此简单的任务使用了很多复杂的方法。我正在寻找初学者的帮助,因为这是我第一次将正则表达式合并到我的代码中。

function findLongestWord(str) {
     str = str.toLowerCase().split("/\w+");
     return str;
}

findLongestWord('The quick brown fox jumped over the lazy dog');

【问题讨论】:

  • 您的问题是“为什么我的正则表达式不起作用”?删除斜线,并将反斜线加倍。您的正则表达式包含在 Javascript 字符串中,因此它不需要初始斜杠,但 确实 需要双反斜杠。
  • @jongware 将我的正则表达式编辑为 "\\w+" 后,我仍然遇到同样的错误,我得到一个以整个字符串为结果的数组
  • 这是您第一次提到错误。那么......什么错误?
  • 我应该说“不需要的结果”而不是错误。答案建议在页面下方。

标签: javascript arrays string split


【解决方案1】:

您的正则表达式结构不佳。即使它已修复,.split(/\w+/),在单词上拆分也会创建一个数组,其中的结果相反与您正在寻找的结果。

您应该使用.match 来收集单词。

function findLongestWord(str) {
  var match = '';

  str.match(/\w+/gi).forEach(function (w) {
    if (w.length > match.length) {
      match = w;
    }
  });
  
  return match;
}

var a = findLongestWord('The quick brown fox jumped over the lazy dog');

console.log(a);

还是有点幼稚,因为单词中间可以有连字符,前面、中间和结尾都可以有撇号。

【讨论】:

  • 当我阅读这篇文章时,我的第一个想法是任务的说明特别指出要使用 split() 函数。请问有没有办法可以使用 split 函数来回答这个问题? @oka
  • 在空格.split(' ').split(/\s+/) 上拆分,但这太天真了——当你的字符串有标点符号时会发生什么? 'hello world!'.split(/\s+/) >> ["hello", "world!"]
  • 再次强调,这是为初学者设计的练习。对于标点符号,我们不能使用替换功能。那么正确的正则表达式会是 .split(/\s+/g) 吗?
  • 如果这是给初学者的,为什么要更多复杂呢? .match 应该用于匹配子字符串 - .split 应该用于拆分子字符串,哪个更适合匹配单词?
  • '我正在执行一项任务,即在任何给定字符串中搜索最长的单词。'呵呵。
【解决方案2】:
function findLongest(str){
    var array = str.split(" ");
    var longest = "";
    for (var i=0; i<array.length; i++){
        if (array[i].length > longest.length){
            longest = array[i];
        }
    }
    console.log(longest);
}
findLongest("The quick brown fox jumped over the lazy dog");

【讨论】:

  • findLongest("Look at the regex break on this sentence, where it's important as to where the comma lies."); >> 'sentence,' - 'sentence'.length &gt; 'important'.length >> false - 超级幼稚的解决方案很有趣。
  • 在拆分字符串之前删除标点符号:p
猜你喜欢
  • 2011-10-23
  • 1970-01-01
  • 2021-11-28
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多