【问题标题】:Regular Expression to search longest word in a string正则表达式搜索字符串中最长的单词
【发布时间】:2015-09-14 09:54:38
【问题描述】:

我有一个字符串:

var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit";

有没有办法使用正则表达式找到字符串中最长的单词?这将阻止我将字符串拆分为单词,然后循环遍历所有单词。

如果我可以在 JavaScript 中将其用作:

str.search(/regex/); // should return 28 (position of word 'consectetur')

谢谢。

【问题讨论】:

  • Regex 不是解决此问题的最佳选择。您最好使用拆分字符串方法。
  • 你的意思是不能使用正则表达式,或者正则表达式的方法不会比拆分字符串方法有效吗?谢谢。
  • 不可能只使用正则表达式,因为正则表达式不比较任何东西。它只匹配符合该模式的第一个找到的匹配项。如果有更多匹配项,则有特定语言的方法来获取它们,以及其他字符串方法来比较字符串及其长度。

标签: javascript regex string search


【解决方案1】:

正如 cmets 中已经提到的,仅使用正则表达式的解决方案是不可能的。几乎所有我能想到的解决方案;仍然需要您将字符串切成单词。您可以使用的最小解决方案是:

var x = str.match( /\w+/g );
var y = x.map( function(t) { return t.length } );
var z = str.indexOf( x[y.indexOf( Math.max.apply(Math, y) )] );

【讨论】:

  • 要添加一个正则表达式:var x = str.match(/\w+/g) - 它也会丢弃“amet”之后的逗号。
【解决方案2】:

检查此更新LINK

JS代码:

 var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit";
    str = str.replace(/[^A-Za-z\s]/g, " ");
        var maxoffset = 0, maxlen=0, wordoffset = 0;
        for (var i = 0; i < str.length; i++) {
            if (str[i] == " ") {
                wordoffset = i + 1;
            }
            if (i - wordoffset + 1> maxlen) {
                maxoffset = wordoffset;
                maxlen = i - wordoffset + 1;
            }
        }
        return str.substring(maxoffset, maxoffset + maxlen);

【讨论】:

  • 在我看来这是一个不错的解决方案。会不会比拆分字符串循环方式高效?
【解决方案3】:

我知道这是旧的,但这是我没有看到发布的解决方案。

Obv 这是发布的最快的解决方案,虽然有点晚了。

使用Array.prototype.reduceString.prototype.match 完成任务。

     text.match(/\w+/g).reduce( (p,c) =>
       c.length > p.length ? c : p
     ,'');

【讨论】:

    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多