Регулярное выражение для поиска смайлов.
Помогите, плз, написать регулярное выражения для поиска текстовых смайлов.
Написал юзерскрипт для форума gamedev.ru, но вот эту подзадачу не могу осилить. |
Вы просите готовый скрипт с нуля.
Это работа, и за нее обычно платят деньги. Для таких сообщений предназначен раздел форума "Работа". Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела. |
Я не прошу скрипт, я прошу регексп. Это не работа, это десяток символов.
|
Ок, поставлю вопрос другим боком. Мне нужно сделать чтобы если перед смайлом и после него есть пробел или скобки, то регексп срабатывал.
Такая запись верна? new RegExp("\\s|\\(\\)" + smile + "\\s|\\(\\)"); Или надо как-то иначе? Можно ли как-то подставить ещё кавычки, etc., но короче. |
alert('test :smlie: this :other: one'.replace(/:(\w+):/gi, '*$1*')); |
Цитата:
а в отладке, особо сложные экземпляры могут достигать сложности эквивалетной даже сотням строк кода тот регексп, который вы попросили, из разряда прочитать одну статью "регулярки за пять шагов". если вы считаете свое время слишком дорогим, чтобы посвятить пол часа изучению регулярок, то с чего бы наше время должно ценится дешевле? извините, но это просто наглость. |
Не совсем то. Дело в том, что я не сам определяю смайлы. Я ищу те, которые обычно применяются юзверями, например :) :( ;-) и прочие.
Приведу фрагмент кода: var smiles = [ ["http://savepic.ru/708616.gif", ":-)", [":\\)", ":-\\)", "\\(:", "\\(-:"]], ["http://savepic.ru/708610.gif", ":-(", [":\\(", ":-\\(", "\\):", "\\)-:"]], ["http://savepic.ru/695298.gif", ";-)", [";-\\)", ";\\)", "\\(;", "\\(-;"]], ["http://savepic.ru/698376.gif", ":-P", [":-P", ":P", ":-p", ":p"]], ["http://savepic.ru/696328.gif", "O_O", ["O_O", "o_o", "OO", "oo"]], ]; var blocks = document.getElementsByClassName('block'); for (b = 0; b < blocks.length; b++) for (i = 0; i < smiles.length; i++) for (j = 0; j < smiles[i][2].length; j++) { var sm = smiles[i][2][j]; var reg = new RegExp("\\.\\,\\(\\)" + sm + "\\.\\,\\(\\)"); var result = blocks[b].innerHTML.replace(reg, "<img src=\"" + smiles[i][0] + "\" />"); blocks[b].innerHTML = result; } Т.е. я ищу элементы, определённые в smiles[][2], заменяю их тегами img с href из smiles[][0]. По-идее, найденный текст, например, oo может быть частью слова, а не смайлом. Потому я определяю смайл, как фрагмент обрамлённый в пробелы|знаки_препинания|с обки|символы_перевода_стро ки ну и он может находиться либо в начале текста либо в конце. |
оформите те символы, которые могут обрамлять смайл в симфольный класс
типа так: /[,. \r\n\(\)]smile[,. \r\n\(\)]/ smile - собственно сам смайл |
То что перед смайлом - в символьный класс и сохраняющие скобки, то что после - в опережающую проверку. Так
/([,.\s\r\n()])smile(?=[,.\s\r\n()])/ Затем при замене то что в первых скобках ставьте на место, а смайл заменяем. Gvozd На мой взгляд регекспы проще кода, и уж точно проще сотен строк кода. |
Чуть не забыл -
/([,.\s\r\n()]|^)smile(?=[,.\s\r\n()]|$)/ Добавил возможные начало/конец строки. З.Ы. есть более тривиальный вариант - \b - граница слова - при этом словами считаются последовательности из букв, цифр и знаков подчеркивания. |
Часовой пояс GMT +3, время: 11:52. |