Разбиение сложных строк с пунктуацией на обычные слова длиной более 2 символов с помощью jQuery

#javascript #jquery #string #split #word

#javascript #jquery #строка #разделение #слово

Вопрос:

Как следует из названия:

Я пытаюсь разделить предложения либо на разделенную запятыми строку, либо на массив, состоящий из очищенных слов длиной более 2 символов и уникальных (дубликаты удалены).

Примером строки может быть:

 $sString = 'Stackoverflow's users are awesome!!! Stackoverflow, is the "best" technical questions and answers website on the interwebnet!';
  

Готовая статья:

 $sStringAfterProcessing = 'stackoverflow, users, are, awesome, the, best, technical, questions, and, answers, website, interwebnet';
  

Обратите внимание, что в первом stackflow удалены ‘s, знаки препинания и дубликаты удалены.

Похоже, это может стать очень сложным.

Предложения приветствуются, и любая помощь очень ценится.

Ответ №1:

Вот так…

 str = str.replace(/[^ws]/ig, "").replace(/s/g, ", ");
  

даст:

Stackoverflows, пользователи, потрясающие, Stackoverflow, лучшие, технические, вопросы и ответы, веб-сайт, в, сети

Пример: http://jsfiddle.net/ktFj2/1/

Или в формате массива:

 var arr = str.replace(/[^ws]/ig, "").split(" ");
  

Пример: http://jsfiddle.net/nnKV8/

Обновление: чтобы удалить дубликаты из массива (и элементы с длиной < 2 ), что-то вроде этого:

 var cleaned = [];
for(var i = 0; i < arr.length; i  ) {
    var el = arr[i];

    if (el.length > 2 amp;amp; $.inArray(el, cleaned) < 0) {
        cleaned.push(el);
    }
}
  

Комментарии:

1. Каков наилучший способ удаления дубликатов после этого процесса?

2. @Haraldo: Ах! Я забыл это требование. Я добавлю что-нибудь, что удаляет дубликаты.

3. Я пытался использовать функцию jQuery $.merge, но id, похоже, не работал — вы рассматривали слияние как вариант удаления дубликатов?

4. Все еще возникают проблемы с некоторыми пунктуациями. некоторые слова, такие как «новости:» или «новости» и т. Д. (игнорировать кавычки) пройти. Каков наилучший способ устранить эти неприятности? Дополнительные параметры регулярных выражений?

5. Действительно? Регулярное выражение должно удалять все символы, не являющиеся словами. В каком браузере вы используете?

Ответ №2:

Вот основной способ (отредактированный):

     var s = 'Stackoverflow's users are awesome!!! Stackoverflow, is the "best" technical questions and answers website on the interwebnet!',
    a = s.split(/[^w]/),
    h = {},
    l = a.length,
    i = 0,
    f = [];
    for(; i < l; i  ){
        if(!h[a[i]] amp;amp; a[i].length > 2){
            h[a[i]] = true;
            f.push(a[i]);
        }
    }
    console.log(f);
  

Комментарии:

1. @Haraldo, я отредактировал ответ, чтобы предоставить массив слов вместо хэша

Ответ №3:

 var newStrings = str.split(/[\ \.\,]/);
  

Поместите любую другую пунктуацию в регулярное выражение или используйте W для не буквенно-цифровых символов.

Это даст массив фактических слов в str.

Затем выполните итерацию по newStrings и выведите только те элементы, длина которых >= 2!