Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2011, 16:05
Новичок на форуме
Отправить личное сообщение для kostysh Посмотреть профиль Найти все сообщения от kostysh
 
Регистрация: 21.11.2010
Сообщений: 9

regex бессмысленный и беспощадный
никак не получается составить регулярное выражение.

на входе есть какой-то текст с вкраплениями тегов и спец-символов. Что-то вроде:

какойтотекст текст<div>фывап</div><div>уцекен&nbsp; &amp;вапапв</div><div></div>блаблабла

Задача: заменить на хекс-коды все символы которые лежат за пределами тегов и не являются спец-символами

Регулярка для выбора тегов и спецсимволов простая: /<[^<]+>|&[^&]+;/g но ведь нужно то как раз наоборот а вот это уже никак не получается...

кое-как удалось добиться выборки текста за пределами тегов: /(?!>).(?=([^>]*<))/g но как при этом еще игнорировать спец-символы? да еще и текст за пределами крайнего правого тега не попадает в результат.

бьюсь над проблемой уже третий день. Похоже придется отказаться от регулярки и перебирать строку простым способом... а как было бы здорово..
text.replace(/супервыражение/g, function(char) {
    var code = char.charCodeAt(0);
    return '&#x' + code.toString(16) + ';';
});

Последний раз редактировалось kostysh, 19.02.2011 в 16:08.
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2011, 16:51
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,497

лол
На правах бреда:
1.
alert( unescape( escape( 'какойтотекст  текст<div>фывап</div><div>уцекен&nbsp;   &amp;вапапв</div><div></div>блаблабла' ).replace( /%u([\dA-F]+)/g , '&#x$1;' ) ) )


2.
function convert(txt){
  var t=e=true;  
  var r=function(c){
    if(c==='<')t=false;
    if(c==='&')e=false;
    if(t&&e)c='&#x'+c.charCodeAt(0).toString(16)+';';
    if(c==='>')t=true;
    if(c===';')e=true;
    return c
  }
  return txt.replace(/./g,r)
}
alert( convert( 'какойтотекст  текст<div>фывап</div><div>уцекен&nbsp;    &amp;вапапв</div><div></div>блаблабла' ) )

Последний раз редактировалось Aetae, 19.02.2011 в 18:51.
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2011, 17:51
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

var str = 'какойтотекст текст<div>фывап</div><div>уцекен&nbsp; &amp;вапапв</div><div></div>блаблабла';
alert(str.replace(/<[^>]+>|&[^;]+;|(.)/g, function(text, ch) {
    return ch ? '&#' + ch.charCodeAt().toString(16) + ';' : text;
}));
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2011, 19:10
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,497

Мне было бы стыдно если бы не моё состояние). =)
Ответить с цитированием
  #5 (permalink)  
Старый 19.02.2011, 21:23
Новичок на форуме
Отправить личное сообщение для kostysh Посмотреть профиль Найти все сообщения от kostysh
 
Регистрация: 21.11.2010
Сообщений: 9

я сегодня выпью за этого замечательного человека. Ну многое понять могу и понимаю, а как дело касается регулярных выражений - капец.

Большое спасибо за помощь! работает! (там только еще "х" добавить и будут хексы)

Последний раз редактировалось kostysh, 19.02.2011 в 21:36.
Ответить с цитированием
  #6 (permalink)  
Старый 19.02.2011, 21:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,497

..или убрать '.toString(16)' =)
Ответить с цитированием
  #7 (permalink)  
Старый 19.02.2011, 21:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от kostysh
Ну многое понять могу и понимаю, а как дело касается регулярных выражений - капец.
http://yandex.ru/yandsearch?text=%D1...id=46510&lr=16
Необходимое и достаточное чтение, чтобы не иметь проблем с регулярными выражениями.
Ответить с цитированием
  #8 (permalink)  
Старый 19.02.2011, 22:42
Новичок на форуме
Отправить личное сообщение для kostysh Посмотреть профиль Найти все сообщения от kostysh
 
Регистрация: 21.11.2010
Сообщений: 9

Сообщение от Kolyaj Посмотреть сообщение
http://yandex.ru/yandsearch?text=%D1...id=46510&lr=16
Необходимое и достаточное чтение, чтобы не иметь проблем с регулярными выражениями.

Спасибо. уже скачал и читаю.
надеюсь закрыть эту тему раз и навсегда.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Елементы по RegEx endryha Общие вопросы Javascript 1 03.03.2009 14:00