Поиск текста с помощью параметров поиска в надстройке Word

Надстройки часто должны действовать на основе текста документа. Метод поиска предоставляется каждым элементом управления содержимым (включая Body, Paragraph, Range, Table, TableRow и базовый объект ContentControl ). Этот метод принимает строку (или выражение с подстановочными знаками), представляющую искомый текст и объект SearchOptions . Она возвращает коллекцию диапазонов, соответствующих искомому тексту.

Важно!

Клиент Word может ограничить доступные параметры поиска. Дополнительные сведения о текущей поддержке см. в разделе Поиск и замена текста.

Параметры поиска

Параметры поиска представляют собой коллекцию логических значений, определяющих способ обработки параметра поиска.

Свойство Описание
ignorePunct Возвращает или задает значение, которое указывает, следует ли пропустить все знаки препинания между словами. Соответствует флажку "Игнорировать знаки препинания" в диалоговом окне Поиск и замена .
ignoreSpace Возвращает или задает значение, которое указывает, следует ли пропустить все пробелы между словами. Соответствует флажку "Игнорировать пробелы" в диалоговом окне Поиск и замена .
matchCase Возвращает или задает значение, указывающее, следует ли выполнять поиск с учетом регистра. Соответствует флажку "Сопоставить регистр" в диалоговом окне Поиск и замена .
matchPrefix Возвращает или задает значение, которое указывает, нужно ли учитывать слова, начинающиеся со строки поиска. Соответствует флажку "Сопоставить префикс" в диалоговом окне Поиск и замена .
matchSuffix Возвращает или задает значение, которое указывает, нужно ли учитывать слова, заканчивающиеся строкой поиска. Соответствует флажку "Соответствовать суффиксу" в диалоговом окне Поиск и замена .
matchWholeWord Возвращает или задает значение, которое указывает, следует ли операции искать только целые слова, а не текст, являющийся частью большего слова. Соответствует флажку "Найти только целые слова" в диалоговом окне Поиск и замена .
matchWildcards Возвращает или задает значение, которое указывает, будет ли выполняться поиск с использованием специальных операторов поиска. Соответствует флажку "Использовать подстановочные знаки" в диалоговом окне Поиск и замена .

Поиск для специальных символов

В следующей таблице перечислены нотации поиска для определенных специальных символов.

Найти Нотации
Знак абзаца ^P
Табуляции ^T
Любой символ ^?
Любая цифра ^#
Любая буква ^$
Символ курсора ^^
Символ раздела ^%
Символ абзаца ^V
Разрыв столбца ^N
Эм дефис ^+
En dash ^=
Знак концевого сноска ^E
Поле ^D
Метка сноски ^F
Рисунок
Разрыв строки вручную ^L
Разрыв страницы вручную
Неразрывный дефис ^~
Неразрывное пространство ^s
Дополнительный дефис ^-
Разрыв раздела ^B
Пробелы

Руководство по подстановочным знакам

В таблице ниже приведено руководство по подстановочным знакам поиска в API JavaScript для Word.

Найти Подстановочный знак Пример
Любой знак ? "л?с" находит "лес" и "лис".
Любая строка знаков * "к*т" находит "кот" и "компот".
Начало слова < <(inter) находит интересное и перехватывать, но не расколоть.
Конец слова > (в)> находит в и внутри, но не интересно.
Один из указанных знаков [ ] "п[оы]л" находит "пол" и "пыл".
Любой символ из этого диапазона [-] [r-t]ight находит право, прицел и туго. Диапазон должен быть указан в алфавитном порядке.
Любой символ, кроме символов из диапазона, указанного в скобках [!э-я] "ко[!а-п]а" находит "кора" и "коса", но не "коза" или "кожа".
Ровно n вхождений предыдущего символа или выражения {n} "жарен{2}ый" находит "жаренный", но не "жареный".
По крайней мере n вхождений предыдущего символа или выражения {n,} "жарен{1,}ый" находит и "жареный" и "жаренный".
От n до m вхождения предыдущего символа или выражения {n,m} 10{1,3} находит 10, 100 и 1000.
Одно или несколько повторений предыдущего знака или выражения @ "жарен@ый" находит "жареный" и "жаренный".

Экранирование специальных символов

Поиск с подстановочными знаками по сути совпадает с поиском по регулярному выражению. В регулярных выражениях есть специальные символы, включая "[", "]", "(", ")", "{", "}", "*", "?", "<", "", ">!" и "@". Если один из этих символов является частью строки литерала, которую ищет код, его необходимо экранировать, чтобы Word знал, что он должен обрабатываться буквально, а не как часть логики регулярного выражения. Чтобы экранировать символ в Word поиске в пользовательском интерфейсе, перед ним должен быть символ обратной косой черты ('\'), но чтобы экранировать его программным способом, поместите его между символами "[]". Например, "[*]*" ищет любую строку, начинающуюся с "*", за которой следует любое количество других символов.

Примеры

В приведенных ниже примерах показаны распространенные сценарии.

// Run a batch operation against the Word object model.
await Word.run(async (context) => {

    // Queue a command to search the document and ignore punctuation.
    const searchResults = context.document.body.search('video you', {ignorePunct: true});

    // Queue a command to load the font property values.
    searchResults.load('font');

    // Synchronize the document state.
    await context.sync();
    console.log('Found count: ' + searchResults.items.length);

    // Queue a set of commands to change the font for each found item.
    for (let i = 0; i < searchResults.items.length; i++) {
        searchResults.items[i].font.color = 'purple';
        searchResults.items[i].font.highlightColor = '#FFFF00'; //Yellow
        searchResults.items[i].font.bold = true;
    }

    // Synchronize the document state.
    await context.sync();
});

Поиск на основе префикса

// Run a batch operation against the Word object model.
await Word.run(async (context) => {

    // Queue a command to search the document based on a prefix.
    const searchResults = context.document.body.search('vid', {matchPrefix: true});

    // Queue a command to load the font property values.
    searchResults.load('font');

    // Synchronize the document state.
    await context.sync();
    console.log('Found count: ' + searchResults.items.length);

    // Queue a set of commands to change the font for each found item.
    for (let i = 0; i < searchResults.items.length; i++) {
        searchResults.items[i].font.color = 'purple';
        searchResults.items[i].font.highlightColor = '#FFFF00'; //Yellow
        searchResults.items[i].font.bold = true;
    }

    // Synchronize the document state.
    await context.sync();
});

Поиск на основе суффикса

// Run a batch operation against the Word object model.
await Word.run(async (context) => {

    // Queue a command to search the document for any string of characters after 'ly'.
    const searchResults = context.document.body.search('ly', {matchSuffix: true});

    // Queue a command to load the font property values.
    searchResults.load('font');

    // Synchronize the document state.
    await context.sync();
    console.log('Found count: ' + searchResults.items.length);

    // Queue a set of commands to change the font for each found item.
    for (let i = 0; i < searchResults.items.length; i++) {
        searchResults.items[i].font.color = 'orange';
        searchResults.items[i].font.highlightColor = 'black';
        searchResults.items[i].font.bold = true;
    }

    // Synchronize the document state.
    await context.sync();
});

Поиск с использованием подстановочных знаков

// Run a batch operation against the Word object model.
await Word.run(async (context) => {

    // Queue a command to search the document with a wildcard
    // for any string of characters that starts with 'to' and ends with 'n'.
    const searchResults = context.document.body.search('to*n', {matchWildcards: true});

    // Queue a command to load the font property values.
    searchResults.load('font');

    // Synchronize the document state.
    await context.sync();
    console.log('Found count: ' + searchResults.items.length);

    // Queue a set of commands to change the font for each found item.
    for (let i = 0; i < searchResults.items.length; i++) {
        searchResults.items[i].font.color = 'purple';
        searchResults.items[i].font.highlightColor = 'pink';
        searchResults.items[i].font.bold = true;
    }

    // Synchronize the document state.
    await context.sync();
});

Поиск специального символа

// Run a batch operation against the Word object model.
await Word.run(async (context) => {

    // Queue a command to search the document for tabs.
    const searchResults = context.document.body.search('^t');

    // Queue a command to load the font property values.
    searchResults.load('font');

    // Synchronize the document state.
    await context.sync();
    console.log('Found count: ' + searchResults.items.length);

    // Queue a set of commands to change the font for each found item.
    for (let i = 0; i < searchResults.items.length; i++) {
        searchResults.items[i].font.color = 'purple';
        searchResults.items[i].font.highlightColor = 'pink';
        searchResults.items[i].font.bold = true;
    }

    // Synchronize the document state.
    await context.sync();
});

Поиск использование подстановочного знака для экранированного специального символа

Как отмечалось ранее в разделе Экранирование специальных символов, в регулярных выражениях используются специальные символы. Чтобы поиск с подстановочными знаками нашел один из этих специальных символов программным способом, его необходимо экранировать с помощью "[" и "]". В этом примере показано, как найти специальный символ "{" с помощью поиска с подстановочными знаками.

// Run a batch operation against the Word object model.
await Word.run(async (context) => {

    // Queue a command to search the document with a wildcard for an escaped opening curly brace.
    const searchResults = context.document.body.search('[{]', { matchWildcards: true });

    // Queue a command to load the font property values.
    searchResults.load('font');

    // Synchronize the document state.
    await context.sync();
    console.log('Found count: ' + searchResults.items.length);

    // Queue a set of commands to change the font for each found item.
    for (let i = 0; i < searchResults.items.length; i++) {
        searchResults.items[i].font.color = 'purple';
        searchResults.items[i].font.highlightColor = 'pink';
        searchResults.items[i].font.bold = true;
    }

    // Synchronize the document state.
    await context.sync();
});

Примеры кода в Script Lab

Получите надстройку Script Lab и опробуйте примеры кода, приведенные в этой статье. Дополнительные сведения о Script Lab см. в статье Изучение API JavaScript для Office с помощью Script Lab.

См. также

Дополнительные сведения см. в следующих статьях: