Очень интересный вопрос. В моем быстром поиске я не нашел ничего предопределенного (даже в Perl), которое решает эту проблему.
РЕДАКТИРОВАТЬ: Ой, похоже, у Java есть нечто подобное, называется hitEnd () - см. Ответ Алана М. HitEnd () говорит, что результат match () (true или false) может быть изменен дополнительным вводом. В книге «Освоение регулярных выражений» говорится, что она не очень надежна (не знаю почему, страница 392 недоступна в книгах Google).
В зависимости от того, какие функции регулярных выражений вы используете, быстрый взлом, например, написание каких-то префиксов вашего регулярного выражения:
например. для a + a * b + c ваши префиксы будут:
a+
a+a*
a+a*b+
a+a*b+c
и попытайтесь сопоставить любой из них с вашей строкой, может сработать. Этот быстрый взлом усложняется, если вы используете оператор выбора, если вы используете оператор диапазона {n, m} или обратные ссылки.
При этом, я думаю, хорошее решение - это немного изменить алгоритм сопоставления.
Обычно используемый алгоритм сопоставления является алгоритмом обратного отслеживания (который хорошо работает на практике, даже если поведение в худшем случае является экспоненциальным). Этот алгоритм успешно завершается всякий раз, когда он достигает конца регулярного выражения (даже если не вся строка была использована). Вам нужно изменить условие завершения так, чтобы оно также успешно завершалось, когда использовались все входные данные.
При этом вам, вероятно, придется реализовать алгоритм в JavaScript. Надеюсь, это станет частью таких библиотек, как Jquery.
Дополнительную информацию и теорию алгоритма можно найти в этой статье:
http://swtch.com/~rsc/regexp/regexp1.html
(даже если он рассматривает алгоритм обратного отслеживания и предлагает алгоритм на основе FA (но FA не может обрабатывать обратные ссылки)).