Регулярное выражение для соответствия последнему пробелу - PullRequest
6 голосов
/ 17 марта 2010

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

У меня есть длинная строка текста, которую я обрезаю до 100 символов. Я хотел бы удалить последний символ, чтобы избежать орфографической ошибки, если при обрезании слова происходит ограничение в 100 символов.

regex.replace(/[ ]$.*?/ig, '');

Кто-нибудь с идеями? Спасибо.

Ответы [ 5 ]

26 голосов
/ 17 марта 2010

Насколько я понимаю, вам нужно удалить последний пробел и все после него, верно?

 str = str.replace(/\s+\S*$/, "")
9 голосов
/ 17 марта 2010

Попробуйте прогнозное утверждение :

/ (?=[^ ]*$)/

И для произвольных пробельных символов:

/\s(?=\S*$)/
3 голосов
/ 17 марта 2010

Это было бы

/ +$/

Пробел (), как минимум один раз (+), в конце строки ($)

Обратите внимание, что указывать пробел в классе символов не нужно, если только вы не хотите сопоставлять больше, чем пробел, например, табуляции [\t ].

Чтобы действительно соответствовать одному последнему пробелу * только 1013 *, используйте / $/


РЕДАКТИРОВАТЬ : Чтобы отрезать все после последнего пробела (если подумать, это то, что вы на самом деле , кажется, хотите, вы можете использовать:

regex.replace(/ +\S*$/ig, '');

, где регулярное выражение означает: «Как минимум один пробел и любые непробельные символы после него (\S*), в конце строки ($).».

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

2 голосов
/ 17 марта 2010

Регулярное выражение /^.+ [^ ]*$/ будет соответствовать только последнему пробелу строки.

0 голосов
/ 17 марта 2010

Используя "классические" RE, вы бы хотели получить " [^ ]*$" - то есть пробел, за которым следует произвольное количество непробельных символов, за которым следует конец строки. Хотя «непробельные символы» могут соответствовать или не соответствовать вашему определению «слово» - например, это также не позволит вам вырезать число посередине. Если вы хотите ограничить слово словом, содержащим буквы, вы можете использовать: " [^A-Za-z]*$" вместо.

Также обратите внимание, что в любом случае, если слово заканчивается точно на 100-м символе, оно будет соответствовать пробелу перед ним, поэтому вы удалите последнее слово целиком. Если вы хотите предотвратить это, вы (вероятно) захотите взглянуть на первый вырезанный символ, и, если это пробел, ничего не удаляйте из буфера.

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