Регулярное выражение для сопоставления слов в предложении по префиксу - PullRequest
3 голосов
/ 29 января 2012

У меня есть это регулярное выражение в запросе mongodb для сопоставления слов по префиксу:

{sentence: new RegExp('^'+key,'gi')}

Каким будет правильный шаблон регулярного выражения, если я хочу, чтобы он соответствовал предложению, которое содержит хотя бы слово, начинающееся с префикса key? Например:

Если у меня есть предложение

"Это собака"

когда key равно 'do', тогда оно должно соответствовать этому предложению, поскольку префикс 'do' является подстрокой слова 'dog'.

Мое решение на данный момент работает только для первого слова предложения. До сих пор это соответствует только этому предложению, если я наберу 't' или 'th' или 'this'. Это не будет соответствовать этому предложению всякий раз, когда я набираю 'i' (префикс для 'is') или 'do' (префикс для 'dog').

Ответы [ 4 ]

5 голосов
/ 29 января 2012

Используйте \b якорь для соответствия границ слова:

\bdo

находит 'do' в 'nice dog', но не соответствует 'много шума из ничего'.

4 голосов
/ 29 января 2012

Вы можете использовать выражение /\bprefix\w+/.Это должно соответствовать любому слову, начинающемуся с "prefix".Здесь \b представляет границу слова, а \w - любой символ слова.

Если вы не хотите получить слово целиком, вы можете просто набрать /\bprefix/.Если вы хотите поместить это в строку, вы также должны экранировать \: '\\bprefix'.

2 голосов
/ 30 января 2012

Другие ответы, предлагающие сопоставление границ слов, аккуратны, но означают, что индекс не используется эффективно. Если вам нужны быстрые поиски, вы можете рассмотреть возможность добавления поля «слова» с разбитыми словами, т. Е.

{sentence: "This is a dog",
  words: ["This", "is", "a", "dog"]}

После помещения индекса в поле words вы можете вернуться к использованию:

{words: new RegExp('^'+key,'gi')}

и key из "do" теперь будут соответствовать этому объекту , а использует индекс.

1 голос
/ 29 января 2012

^ соответствует началу строки (или началу строки, если установлен многострочный флаг).

\b соответствует границе слова.

\bdo соответствует словамначинающийся с "do".

Итак, для вашего примера:

{sentence: new RegExp('\\b'+key,'gi')}

(отмечая, что в строке JavaScript вы должны избегать обратной косой черты.)

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

new RegExp('(\\b' + key + '\\w*)','gi')

Где \w - любой символ слова, а * - ноль или более.Если вы хотите, чтобы слова имели по крайней мере на один символ больше, чем key, используйте + вместо *.

Для получения более подробной информации см. Множество руководств по регулярным выражениям в Интернете, например, https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...