Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помогите с регуляркой (https://javascript.ru/forum/misc/45533-pomogite-s-regulyarkojj.html)

dima*** 04.03.2014 20:23

помогите с регуляркой
 
Программа


<html>
<head>
<title>Документ без названия</title>
<meta charset="utf-8">
</head>
<body>
<p style ='display:none'>
I тур
26 апреля 2013 г.
1. Круглолесское - Средний              перенос
27 апреля 2013 г.
2. Ветераны футбола - Саблинское    на КДК 
3. Новокавказский - АСХК                   3-0
26 апреля 2013 г.
4. Ал. ДЮСШ - Калиновское                 7-2
 
II тур 
3 мая 2013 г.
1. Средний - Калиновское                    4-1
2. Новокавказский - Ал. ДЮСШ             4-4
3. АСХК - Саблинское                          4-8
4. Круглолесское - Ветераны футбола   0-3
 
III тур 
8 мая 2013 г.
1. Ветераны футбола - Средний           4-2
22 мая 2013 г.
2. АСХК - Круглолесское (зап. поле)
3. Саблинское- Ал. ДЮСШ (ос.поле)
8 мая 2013 г.
4. Калиновское - Новокавказский        0-9
 

</p>

<script>

var a=document.getElementsByTagName('p')[0].innerHTML;
a=a.replace(/^\s*?\n+\s*|\s*?\n\s*$/img,'').split(/\s*\n\s*/).join('\n');
//a=a.replace(/(\n\s*\n)|(\n)/img,'<br>');

reg0=/[IVX]+\s*тур/img;
reg1=/\d+\s*[а-я]+\s*\d*\s*г\./img;
reg2=/\d+\.\s(.+)\s\-\s(.*?)\s{2,}(\d\-\d|[а-я]+)/img;


b=a.replace(reg2,'$1,$2,$3').replace(/(\d)\-(\d)/img,'$1,$2');
b=b.split(/\n/);
//.join('<br>');					
for (var i=0; i<b.length; i++) {
if(b[i].indexOf(',')>0){
document.write(b[i]+'<br>');
}
else if(/[IVX]+\s*тур/.test(b[i])){
document.write(b[i]+'<br>');
}
else if(/\d+\s*[а-я]+\s*\d*\s*г/.test(b[i])){
document.write(b[i]+'<br>');
}
else{
document.write('<span style="color: #FF0000;">' + b[i] + '</span>'+'<br>');
}
}
document.write('<br>');
document.write('<br>');


b=b.join('<br>');

c=b.split(reg0).join(',');//Удаляем "тур"
c=c.split(reg1).join(',');//Удаляем "дата"
c=c.split('<br>');


d=[];//Удаляем "запятые"
for (var i=0; i<c.length; i++) {
if(c[i]!=',') {
  d.push(c[i])
}}


for (var i=0; i<d.length; i++) {
d[i]=d[i].split(',',2);

}


/*
e=[];

function zap(c){
return c!=',';
}

e=c.filter(zap);
document.write(e);
*/


function unique(arr) {
  var obj = {};
  for(var i=0; i<arr.length; i++) {
for(var j=0; j<arr.length; j++) {
    var str = arr[i][j];
    obj[str] = true; // запомнить строку в виде свойства объекта
  }}
 return Object.keys(obj); // или собрать ключи перебором для IE<9

}

k=unique(d);

for (var i=0; i<k.length; i++) {

document.write(i+1+".  "+k[i]+'<br>');
console.log(i+1+".  "+k[i]+'<br>');
}

</script>
</body>
</html>


Просто убивает:
a=a.replace(/^\s*?\n+\s*|\s*?\n\s*$/img,'').split(/\s*\n\s*/).join('\n');

Ruslan_xDD-А чем pre не угодил?
http://javascript.ru/forum/misc/4541...-ne-tak-2.html


Мне,просто очень нужно поменять reg0 c reg0=/[IVX]+\s*тур/img;
на reg0=/^.*тур.*$/;
да и reg1 тоже менять нужно...

С <pre> лучше сделать?

Deff 04.03.2014 22:27

dima***,
Нарисуй входной массив и выходнойЮ дабы не втыкать что нужно

dima*** 04.03.2014 22:49

Deff!
Да, всё отлично работает ,всё так и должно быть.Просто нужно улучшить код.
http://www.ffsk.ru/articler.php?id=857
http://www.ffsk.ru/articler.php?id=893
и ещё много-много вариантов
Вот ссылки из этого нужно сделать одну программу,типа как у меня.
p.s.Красным выходит ,что не отфильтровалось,потому что единую программу составить нереально.
Вообщем,программа меня полностью устраивает только доделть чуть-чуть нужно.

Deff 04.03.2014 23:36

dima***,
Поясни лучше на примерах, ибо вникать в столь длинную регулярку не айс(или забей)

dima*** 05.03.2014 09:23

Вообщем,нужно сделать многострочный режим.

Получили текст:
var a=document.getElementsByTagName('p')[0].innerHTML;
или
var a=document.getElementsByTagName('pre')[0].innerHTML;
или ещё как-то,

а дальше нужно,чтобы можно было к ней применить начало и конец строки(^ и $),т.е. сделать многострочной.

Каким образом создать многострочную строку?

ksa 05.03.2014 09:37

Цитата:

Сообщение от dima***
Каким образом создать многострочную строку?

Это как понять? :blink:

dima*** 05.03.2014 09:42

<html>
<head>
<title>Документ без названия</title>
<meta charset="utf-8">
</head>
<body>
<p style ='display:none'>
I тур
26 апреля 2013 г.
1. Круглолесское - Средний              перенос
27 апреля 2013 г.
2. Ветераны футбола - Саблинское    на КДК 
3. Новокавказский - АСХК                   3-0
26 апреля 2013 г.
4. Ал. ДЮСШ - Калиновское                 7-2
 
II тур 
3 мая 2013 г.
1. Средний - Калиновское                    4-1
2. Новокавказский - Ал. ДЮСШ             4-4
3. АСХК - Саблинское                          4-8
4. Круглолесское - Ветераны футбола   0-3
 
III тур 
8 мая 2013 г.
1. Ветераны футбола - Средний           4-2
22 мая 2013 г.
2. АСХК - Круглолесское (зап. поле)
3. Саблинское- Ал. ДЮСШ (ос.поле)
8 мая 2013 г.
4. Калиновское - Новокавказский        0-9
 

</p>

<script>

var a=document.getElementsByTagName('p')[0].innerHTML;
document.write(a);

</script>
</body>
</html>


Так мы получили строку,она не является многострочной или является???

ksa 05.03.2014 09:46

Цитата:

Сообщение от dima***
Так мы получили строку,она не является многострочной или является?

Встречный вопрос...
- Ты являешся многочеловечным человеком?

Deff 05.03.2014 13:59

<html>
<head>
<title>Документ без названия</title>
<meta charset="utf-8">
</head>
<body>
<p style ='display:none'>
I тур
26 апреля 2013 г.
1. Круглолесское - Средний              перенос
27 апреля 2013 г.
2. Ветераны футбола - Саблинское    на КДК 
3. Новокавказский - АСХК                   3-0
26 апреля 2013 г.
4. Ал. ДЮСШ - Калиновское                 7-2
 
II тур 
3 мая 2013 г.
1. Средний - Калиновское                    4-1
2. Новокавказский - Ал. ДЮСШ             4-4
3. АСХК - Саблинское                          4-8
4. Круглолесское - Ветераны футбола   0-3
 
III тур 
8 мая 2013 г.
1. Ветераны футбола - Средний           4-2
22 мая 2013 г.
2. АСХК - Круглолесское (зап. поле)
3. Саблинское- Ал. ДЮСШ (ос.поле)
8 мая 2013 г.
4. Калиновское - Новокавказский        0-9
 

</p>

<script>

var a=document.getElementsByTagName('p')[0].innerHTML
document.write(a.replace(/\n/gim,'<br/>'));
//Или
document.write('<pre>'+a+'</pre>');
//Или
document.write('<span style="display:block">'+a.split('\n').join('</span><span style="display:block">')+'</span>');
</script>
</body>
</html>

Cтрока уже многострочная, но в HTML перевод строки осуществляется через <br/> либо обувание в теги <pre> либо одевание каждой строки в блочный тег, к примеру в <span style="display:block">

danik.js 05.03.2014 14:10

Цитата:

Сообщение от Deff
блочный тег, к примеру в <span style="display:block">

Ну помоему только воспаленный мозг придумает такой нелепый пример ))
Есть же <div> ))

Кстати:

<style>
    body{
        white-space: pre;
    }
</style>
<script>
var string = 'abc\ncde';
document.write(string);
</script>


Часовой пояс GMT +3, время: 03:31.