Regex для соответствия последнему пробелу

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

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

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

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

7
задан Joel Coehoorn 1 December 2011 в 02:51
поделиться

5 ответов

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

 str = str.replace(/\s+\S*$/, "")
26
ответ дан 6 December 2019 в 05:03
поделиться

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

2
ответ дан 6 December 2019 в 05:03
поделиться

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

/ (?=[^ ]*$)/

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

/\s(?=\S*$)/
9
ответ дан 6 December 2019 в 05:03
поделиться

Это будет

/ +$/

Символ пробела (), хотя бы один раз (+), в конце строки ($)

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

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


EDIT: Чтобы отсечь все после последнего пробела (думая об этом, это то, что вы на самом деле, кажется, хотите, вы можете использовать:

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

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

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

3
ответ дан 6 December 2019 в 05:03
поделиться

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

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

0
ответ дан 6 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: