2015-09-14 3 views
-1

У меня есть строка:Регулярного выражения для поиска самых длинного слова в строке

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

Есть ли способ, чтобы найти самое длинное слово в строке, используя регулярное выражение? Это не позволит мне разбить строку на слова, а затем прокрутить все их.

Возможно, если я могу использовать его в JavaScript как:

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

Спасибо.

+7

Regex - не лучший вариант для решения этой проблемы. Вам лучше использовать метод разделенной строки. – hjpotter92

+0

Знаете ли вы, что это невозможно с помощью регулярного выражения, или метод регулярных выражений не будет эффективен, чем метод разделенной строки? Благодарю. –

+1

Нельзя делать с регулярным выражением только потому, что regex ничего не сравнивает. Он просто совпадает с первым найденным совпадением, которое соответствует шаблону. Если есть больше совпадений, то для их получения используются методы, специфичные для языка, и другие методы строк для сравнения строк и их длины. –

ответ

0

Проверить это обновление 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); 
+0

Мне кажется приятным решением. Будет ли это эффективным, чем метод сплит-строки? –

1

Как уже упоминалось в комментариях, это не представляется возможным с регулярным выражением только решения. И почти все решения, о которых я могу думать; все равно понадобится, чтобы вы нарезали строку на слова. Наименьшее решение, которое вы можете использовать, будет:

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))]); 
+2

Чтобы добавить регулярное выражение в микс: 'var x = str.match (/ \ w +/g)' - он также отбросит запятую после «amet». – pawel

Смежные вопросы