Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.06.2012, 12:53
Аспирант
Отправить личное сообщение для tazododu Посмотреть профиль Найти все сообщения от tazododu
 
Регистрация: 18.02.2010
Сообщений: 90

Помогите укртотить монстра (сократить регулярку)
Всем привет.
Есть задача, вырезать со строки определенные словосочетания, только в том случае, если рядом с ними нет букв.
Сделал такой вот прегреплейс:

^((ТОВ)|(ООО)|(ДП)|(НПКП)|(ЗАО)|(ОАО)|(ЧП)|(СПД)|(ЧП)|(ФОП)|(ФЛП)|(ФЛ)|(НПП)|(МП)|(фирма)|(компания)|(частное предприятие)|(предприятие)|(ч\/п)|(OOO)|(интернет\-магазин)|(интернет)|(магазин)|(TM)|(ТМ))[^a-zа-яіґїєё]|[^a-zа-яіґїєё]((ТОВ)|(ООО)|(ДП)|(НПКП)|(ЗАО)|(ОАО)|(ЧП)|(СПД)|(ЧП)|(ФОП)|(ФЛП)|(ФЛ)|(НПП)|(МП)|(фирма)|(компания)|(частное предприятие)|(предприятие)|(ч\/п)|(OOO)|(интернет\-магазин)|(интернет)|(магазин)|(TM)|(ТМ))[^a-zа-яіґїєё]|[^a-zа-яіґїєё]((ТОВ)|(ООО)|(ДП)|(НПКП)|(ЗАО)|(ОАО)|(ЧП)|(СПД)|(ЧП)|(ФОП)|(ФЛП)|(ФЛ)|(НПП)|(МП)|(фирма)|(компания)|(частное предприятие)|(предприятие)|(ч\/п)|(OOO)|(интернет\-магазин)|(интернет)|(магазин)|(TM)|(ТМ))$


Глаз режет, аж до боли. Как это все дело можно было бы написать красивее? Ну и в случае добавления условий, его приходится добавлять сразу в трех местах, что тоже не совсем хорошо.

т.е. Товарищ Иванов А.А. должен остаться без изменений, а ТОВ Иванов А.А. должен стать просто Ивановым.
Ответить с цитированием
  #2 (permalink)  
Старый 12.06.2012, 12:57
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Сообщение от tazododu
определенные словосочетания
может я и ошибаюсь, но если определенные, то по-другому и не сделаешь, не?
__________________
оляля, ололо
Ответить с цитированием
  #3 (permalink)  
Старый 12.06.2012, 13:01
Аспирант
Отправить личное сообщение для tazododu Посмотреть профиль Найти все сообщения от tazododu
 
Регистрация: 18.02.2010
Сообщений: 90

В моем случае они написаны по 3 раза. Я думал, что можно это написать как-то элегантнее
Ответить с цитированием
  #4 (permalink)  
Старый 12.06.2012, 15:22
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

tazododu,
1. лучше составить массив регеспов, иначе не добавить не отнять
Перебор массива - в точности тож что и палка конкатенации, но занчительно читабельнее и взаимозаменяемо
Ответить с цитированием
  #5 (permalink)  
Старый 13.06.2012, 09:49
Аспирант
Отправить личное сообщение для tazododu Посмотреть профиль Найти все сообщения от tazododu
 
Регистрация: 18.02.2010
Сообщений: 90

Сообщение от Deff Посмотреть сообщение
tazododu,
1. лучше составить массив регеспов, иначе не добавить не отнять
Перебор массива - в точности тож что и палка конкатенации, но занчительно читабельнее и взаимозаменяемо
что за массив регеспов? можно пример в стиле 2+2=4 ?))
т.е. простенький какой-то)
Ответить с цитированием
  #6 (permalink)  
Старый 13.06.2012, 10:25
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от tazododu
Есть задача, вырезать со строки определенные словосочетания, только в том случае, если рядом с ними нет букв.
в строке только одно слово?
или слова нужно соответствующие найти в строке,если да -так нужно искать от начала слова до конца слова,а не от начала строки до её конца, или хотябы учитывать правильную последовательность разделителей между словами

Последний раз редактировалось dmitriymar, 13.06.2012 в 10:28.
Ответить с цитированием
  #7 (permalink)  
Старый 13.06.2012, 10:43
Аспирант
Отправить личное сообщение для tazododu Посмотреть профиль Найти все сообщения от tazododu
 
Регистрация: 18.02.2010
Сообщений: 90

Сообщение от dmitriymar Посмотреть сообщение
в строке только одно слово?
или слова нужно соответствующие найти в строке,если да -так нужно искать от начала слова до конца слова,а не от начала строки до её конца, или хотябы учитывать правильную последовательность разделителей между словами
В строке может быть куча всяких слов. Например
ООО "Труляля" Чпонин А.А -> "Труляля" Чпонин А.А
ЧП Онин А.А -> Онин А.А
Ответить с цитированием
  #8 (permalink)  
Старый 13.06.2012, 16:45
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от tazododu
то за массив регеспов? можно пример в стиле 2+2=4 ?))
<p id="ThisSTROKA">.НПКП "Кузнецкий Мост" производит лучшие в мире частные предприятия ,ООО "Вася" и ч/п "Коля".</p>
<script type="text/javascript">
var CensorArray=[
"ТОВ","ООО","ДП","НПКП","ЗАО","ОАО",
"ЧП","СПД","ЧП","ФОП","ФЛП","ФЛ",
"НПП","МП","фирма","компания",
"частное предприятие","предприятие",
"ч\\/п","OOO","интернет\-магазин",
"интернет","магазин","TM",

" =====   | CENSORED  | ===== "]
var arrLength = CensorArray.length-1;

var str = document.getElementById('ThisSTROKA').innerHTML;
var str2=str;
 for(var i=0; i < arrLength; i++ ){//alert("A")
  str2 = str2.replace(eval('/[\\s\.,]'+CensorArray[i]+'[\\s\.,]/gm'),CensorArray[arrLength])
 }
if(str!=str2){document.getElementById('ThisSTROKA').innerHTML=str2}

</script>


Экранирование в массиве нужно делать двойное "ч\\/п",
Ответить с цитированием
  #9 (permalink)  
Старый 13.06.2012, 20:36
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

C помощью какого метод вы хотите использовать эту регулярку: с помощью exec или другого метода?
Зачем вам так много захватывающих скобок? Вместо (ТОВ)|(ООО)|(ДП)|(НПКП)|... можно было писать ТОВ|ООО|ДП|НПКП|... Я не думаю, что вам понадобятся эти результаты совпадений.
Ответить с цитированием
  #10 (permalink)  
Старый 13.06.2012, 20:51
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Я не знаю, подходит ли это вам:
/\b(?:ТОВ|ООО|ДП|НПКП|ЗАО|ОАО|ЧП|СПД|ЧП|ФОП|ФЛП|ФЛ|НПП|МП|фирма|компания|частное предприятие|предприятие|ч\/п|OOO|интернет\-магазин|интернет|магазин|TM)\b/g

\b обозначает границу слова.

Последний раз редактировалось oneguy, 13.06.2012 в 20:56.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сделать регулярку для HTML шаблона zeraid Общие вопросы Javascript 1 25.12.2011 15:28
Помогите "допилить" регулярку. nule Общие вопросы Javascript 6 16.11.2011 20:05
Помогите сократить код Diego Общие вопросы Javascript 4 14.02.2011 20:01