Быстрый способ найти совпадения регулярных выражений в большом документе с помощью JavaScript? - PullRequest
0 голосов
/ 02 марта 2010

Мне нужно найти в тексте HTML-документа тексты поиска (электронные письма, номера телефонов и т. Д.) И слова. Соответствия должны быть выделены и сделаны привязанными, чтобы можно было создать ссылку для перехода к местоположению совпадений. Таким образом, он не только должен находить совпадения, используя шаблоны, необходимые для замены, но и добавляет соответствующий HTML-код.

В настоящее время я использую jquery, но меня не очень устраивает скорость. В 1,5-мегабайтном файле для сопоставления 2 регулярных выражений требуется около 5 секунд, и оно увеличивается, когда я добавляю дополнительные критерии поиска.

Кто-нибудь знает быстрый метод поиска совпадений регулярных выражений в большом документе с использованием JavaScript?

1 Ответ

1 голос
/ 02 марта 2010

Вы говорите, что «используете jQuery», но не говорите как. Вы пробовали «выделить» плагин (или, как вам кажется, вам нужен его производный)? Я использовал это: http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html, и это не кажется мне медленным. Опять же, вам придется поработать над этим, чтобы добавить в него нужную разметку, но это должно быть достаточно ясно - она ​​не очень большая.

Похоже, что вы хотели бы сделать для производительности, взять ваши регулярные выражения и объединить их в то, что составляет "токен грамматику". Другими словами, вы не хотите начинать с нуля с поиска каждого регулярного выражения по всему документу. Вместо этого вы захотите пройти через это с помощью регулярного выражения, которое соответствует каждой возможной цели (по одной, конечно, за раз), и каждый раз, когда она находит одну, вы заменяете ее на что угодно. Таким образом, вы можете сделать один проход по документу, независимо от его размера и количества шаблонов, которые вы ищете.

edit Плагин Mr. Burkard не позволяет выполнять поиск с помощью регулярных выражений; он использует "indexOf" внутри. Хм.

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