Найти позицию следующего слова в позиции JavaScript - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть строка слов на иврите, как это:

כלל הנה השמים מספרים כבוד אל. הנה תחלה

и массив индексов совпадений в этой строке. Мне нужно найти позицию слова после слова в данной позиции в массиве. Мне также нужно, чтобы точки, запятые и другие подобные символы не включались.

Эти причины не позволяют мне использовать код для поиска слова в позиции в javascript

Редактировать:

Цель состояла в том, чтобы изменить функцию этого поста, чтобы получить позицию слова рядом с позицией в параметре

Вот мое окончательное решение:

String.prototype.indexOfEnd = function(string, position) {
    var io = this.indexOf(string, position);
    return  (io == -1 ? -1 : io + string.length);
}

function getWordAt (str, pos) {

    str = String(str);
    pos = Number(pos) >>> 0;

    var left = str.slice(0, pos).search(/[\u0590-\u05fe]+$/),
        right = str.slice(pos).search(/[\s,.\t-_()]+/);

    if (right < 0) {
        return str.slice(left);
    }

    return str.slice(left, right + pos);
}


function getNextWordAt (str, pos) {
    var result = getWordAt(str, pos);
    for(let i=0; i<str.length - pos; i++) {
      let tempWord = getWordAt(str, pos + i)
      if (result != tempWord && tempWord != ' ' && tempWord != ',' && tempWord != '.' && tempWord != '') {
        return [phrase.indexOfEnd(tempWord, pos), tempWord];
      }
    }
}

1 Ответ

1 голос
/ 23 февраля 2020

Код сообщения, которое вы не хотите использовать, является совершенно правильным. Но регулярное выражение basi c не предназначено для иврита. Таким образом, вы должны настроить «без пробелов», равное /S, в нужный вам диапазон кодов. Быстрое исследование принесло этот результат для charrange, который вы используете на иврите в своем регулярном выражении: \u0590-\u05fe

Вы можете расширить \s любым разделительным символом, который вы хотите (например, [\s,.\t]+) для пробелов. , kommas, dots and tabs.

Редактирование кода Этот ответ привел меня к следующему коду решения для вас (обратите внимание, что вы должны читать текст на иврите в обратном направлении):

function getWordAt (str, pos) {

    // Perform type conversions.
    str = String(str);
    pos = Number(pos) >>> 0;

    // Search for the word's beginning and end.


    nextWhitespace = pos + str.slice(pos).search(/\s/);
    str = str.slice(nextWhitespace+1);

    var left = str.slice(0, pos + 1).search(/[\u0590-\u05fe]+$/),
        right = str.slice(pos).search(/[\s,.\t]+/);

    // The last word in the string is a special case.
    if (right < 0) {
        return str.slice(left);
    }

    // Return the word, using the located bounds to extract it from the string.
    return str.slice(left, right + pos);

}

Редактировать: Добавил следующие строки в код, чтобы получить СЛЕДУЮЩИЙ слово:

nextWhitespace = pos + str.slice(pos).search(/\s/);
str = str.slice(nextWhitespace+1);
...