#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!