Разбиение сложных пунктуированных строк на обычные слова длиной более 2 символов с помощью jQuery - PullRequest
2 голосов
/ 12 октября 2011

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

Я пытаюсь разбить предложения на строку или массив, разделенный запятой, состоящий из очищенных слов длиной более 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';

Обратите внимание, что в первом потоке стека удалены, пунктуация и дубликаты удалены.

Кажется, это может быть очень сложно.

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

Ответы [ 3 ]

2 голосов
/ 12 октября 2011

Здесь идет ...

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

даст:

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

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

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

var arr = str.replace(/[^\w\s]/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 && $.inArray(el, cleaned) < 0) {
        cleaned.push(el);
    }
}
1 голос
/ 12 октября 2011

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

    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]] && a[i].length > 2){
            h[a[i]] = true;
            f.push(a[i]);
        }
    }
    console.log(f);
0 голосов
/ 12 октября 2011
var newStrings = str.split(/[\\ \\.\\,]/);

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

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

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

...