"This is the best moth".match(/\bth/gi);
или с переменной для вашей строки
var string = "This is the best moth";
alert(string.match(/\bth/gi));
\b
в регулярном выражении является границей слова, поэтому \bth
будет соответствовать только th
, что в начале слова.
gi
для глобального соответствия (ищите все вхождения) и без учета регистра
(я добавил туда moth
в качестве напоминания, чтобы проверить, что оно не совпадает)
Пример jsFiddle
Редактировать:
Итак, приведенное выше возвращает толькочасть, которую вы соответствуете (th
).Если вы хотите вернуть все слова, вы должны соответствовать всему слову.
Вот тут-то все быстро и сложно.Сначала без буквы сущности HTML:
string.match(/\bth[^\b]*?\b/gi);
Пример
Чтобы соответствовать всему слову, перейдите от границы слова \b
возьмитеth
, за которыми следуют границы без слов [^\b]
, пока не дойдете до границы другого слова \b
.Знак *
означает, что вы хотите найти 0 или более из предыдущих (не ограничивающих слов) отметок ?
означает, что это ленивое совпадение.Другими словами, он не расширяется до максимально возможного размера, но останавливается при первой возможности.
Если у вас есть символы сущностей HTML, такие как ä (ä
), все усложняется очень быстро, и выдолжны использовать пробел или пробел и набор определенных символов, которые могут находиться на границах слов.
string.match(/\sth[^\s]*|^th[^\s]*/gi);
Пример с сущностями HTML.
Поскольку мы не используем границы слов, мы должны позаботиться о начале строки отдельно (|^
).
Выше будет захватывать пробел в начале слова.Использование \b
не будет захватывать пробелы, так как \b
не имеет ширины.