12.06.2012, 12:53
|
Аспирант
|
|
Регистрация: 18.02.2010
Сообщений: 90
|
|
Помогите укртотить монстра (сократить регулярку)
Всем привет.
Есть задача, вырезать со строки определенные словосочетания, только в том случае, если рядом с ними нет букв.
Сделал такой вот прегреплейс:
^((ТОВ)|(ООО)|(ДП)|(НПКП)|(ЗАО)|(ОАО)|(ЧП)|(СПД)|(ЧП)|(ФОП)|(ФЛП)|(ФЛ)|(НПП)|(МП)|(фирма)|(компания)|(частное предприятие)|(предприятие)|(ч\/п)|(OOO)|(интернет\-магазин)|(интернет)|(магазин)|(TM)|(ТМ))[^a-zа-яіґїєё]|[^a-zа-яіґїєё]((ТОВ)|(ООО)|(ДП)|(НПКП)|(ЗАО)|(ОАО)|(ЧП)|(СПД)|(ЧП)|(ФОП)|(ФЛП)|(ФЛ)|(НПП)|(МП)|(фирма)|(компания)|(частное предприятие)|(предприятие)|(ч\/п)|(OOO)|(интернет\-магазин)|(интернет)|(магазин)|(TM)|(ТМ))[^a-zа-яіґїєё]|[^a-zа-яіґїєё]((ТОВ)|(ООО)|(ДП)|(НПКП)|(ЗАО)|(ОАО)|(ЧП)|(СПД)|(ЧП)|(ФОП)|(ФЛП)|(ФЛ)|(НПП)|(МП)|(фирма)|(компания)|(частное предприятие)|(предприятие)|(ч\/п)|(OOO)|(интернет\-магазин)|(интернет)|(магазин)|(TM)|(ТМ))$
Глаз режет, аж до боли. Как это все дело можно было бы написать красивее? Ну и в случае добавления условий, его приходится добавлять сразу в трех местах, что тоже не совсем хорошо.
т.е. Товарищ Иванов А.А. должен остаться без изменений, а ТОВ Иванов А.А. должен стать просто Ивановым.
|
|
12.06.2012, 12:57
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Сообщение от tazododu
|
определенные словосочетания
|
может я и ошибаюсь, но если определенные, то по-другому и не сделаешь, не?
__________________
оляля, ололо
|
|
12.06.2012, 13:01
|
Аспирант
|
|
Регистрация: 18.02.2010
Сообщений: 90
|
|
В моем случае они написаны по 3 раза. Я думал, что можно это написать как-то элегантнее
|
|
12.06.2012, 15:22
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
tazododu,
1. лучше составить массив регеспов, иначе не добавить не отнять
Перебор массива - в точности тож что и палка конкатенации, но занчительно читабельнее и взаимозаменяемо
|
|
13.06.2012, 09:49
|
Аспирант
|
|
Регистрация: 18.02.2010
Сообщений: 90
|
|
Сообщение от Deff
|
tazododu,
1. лучше составить массив регеспов, иначе не добавить не отнять
Перебор массива - в точности тож что и палка конкатенации, но занчительно читабельнее и взаимозаменяемо
|
что за массив регеспов? можно пример в стиле 2+2=4 ?))
т.е. простенький какой-то)
|
|
13.06.2012, 10:25
|
х.з
|
|
Регистрация: 21.11.2010
Сообщений: 4,588
|
|
Сообщение от tazododu
|
Есть задача, вырезать со строки определенные словосочетания, только в том случае, если рядом с ними нет букв.
|
в строке только одно слово?
или слова нужно соответствующие найти в строке,если да -так нужно искать от начала слова до конца слова,а не от начала строки до её конца, или хотябы учитывать правильную последовательность разделителей между словами
Последний раз редактировалось dmitriymar, 13.06.2012 в 10:28.
|
|
13.06.2012, 10:43
|
Аспирант
|
|
Регистрация: 18.02.2010
Сообщений: 90
|
|
Сообщение от dmitriymar
|
в строке только одно слово?
или слова нужно соответствующие найти в строке,если да -так нужно искать от начала слова до конца слова,а не от начала строки до её конца, или хотябы учитывать правильную последовательность разделителей между словами
|
В строке может быть куча всяких слов. Например
ООО "Труляля" Чпонин А.А -> "Труляля" Чпонин А.А
ЧП Онин А.А -> Онин А.А
|
|
13.06.2012, 16:45
|
без статуса
|
|
Регистрация: 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>
Экранирование в массиве нужно делать двойное "ч \\/п",
|
|
13.06.2012, 20:36
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
C помощью какого метод вы хотите использовать эту регулярку: с помощью exec или другого метода?
Зачем вам так много захватывающих скобок? Вместо (ТОВ)|(ООО)|(ДП)|(НПКП)|... можно было писать ТОВ|ООО|ДП|НПКП|... Я не думаю, что вам понадобятся эти результаты совпадений.
|
|
13.06.2012, 20:51
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Я не знаю, подходит ли это вам:
/\b(?:ТОВ|ООО|ДП|НПКП|ЗАО|ОАО|ЧП|СПД|ЧП|ФОП|ФЛП|ФЛ|НПП|МП|фирма|компания|частное предприятие|предприятие|ч\/п|OOO|интернет\-магазин|интернет|магазин|TM)\b/g
\b обозначает границу слова.
Последний раз редактировалось oneguy, 13.06.2012 в 20:56.
|
|
|
|