Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите,пожалуйста,поче му не работает,в этом месте (https://javascript.ru/forum/misc/37592-podskazhite-pozhalujjsta-poche-mu-ne-rabotaet-v-ehtom-meste.html)

dima*** 26.04.2013 09:46

Подскажите,пожалуйста,поче му не работает,в этом месте
 
Подскажите,пожалуйста,поче му не работает,в этом месте:

var reguha=/([А-Яа-я]+)([А-Яа-я]+|\d+)(\d)([А-Яа-я]+|\d+)/;
if(b1[i][0][k][1]==Number){
b1[i][0][k][l]=b1[i][0][k][l].replace(reguha,'$1,$4,$2,$3');
}


Вот весь код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Документ без названия</title>
	</head>
	
    <body>
	<p style='display:none'>
• Родник - Низам 1:1 
 Горец - Авангард 3:1 
 Гумс - Берд 2:0 
 Вайнах - Динамо 2:1 
 Лидер - Автуры 3:1 
 Оскар - Мартан 2:0 
 Марта - Даймохк 1:2 
 ЧГУ - Терек 3:1 19.04.13 00:11 Nohcho Правка ip inf   

• Родник 1 - 1 Низам 
 Горец 2 - 1 Авангард 
 Гумс 2 - 0 Берд 
 Вайнах 2 - 2 Динамо 
 Лидер 4 - 0 Автуры
 Оскар 3 - 0 Мартан 
 Марта 1 - 2 Даймохк 
 ЧГУ 1 - 2 ТЕРЕК 19.04.13 00:17 Турпал-Али Правка ip inf   

• Родник 1-2 Низам 
 Горец 2-0 Авангард 
 Гумс 2-1 Берд 
 Вайнах 3-1 Динамо 
 Лидер 4-0 Автуры 
 Оскар 0-0 Мартан 
 Марта 1-2 Даймохк 
 ЧГУ 4-1 Терек 19.04.13 00:18 Beck-77 Правка ip inf  
	</p>
	
<script>
   var a1 = document.getElementsByTagName('p')[0].innerHTML;
a1 = a1.replace(/^\s*?\n\s*|\s*?\n\s*$/img,'').split(/\s*\n\s*/).join('\n');
	
var b1=a1.split(/\sПравка\sip\sinf/); 

for (var i=0;i<b1.length-1; i++){

	b1[i]= b1[i].split(/\d{2}\.\d{2}\.\d{2}\s\d{2}\:\d{2}\s/); 

document.write('<br>' + b1[i][1]+ ':'+'<br>');

	for (var j=0;j<b1[i].length; j++){
	
	b1[i][0]=b1[i][0].split(/\n/);

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

var rega = /\d|[А-Яа-я]+/ig;

 b1[i][0][k]=b1[i][0][k].match(rega);

if (b1[i][0][k] != null){

for (var l =0; l< b1[i][0][k].length ;l++){
 //b1[i][0][k][l].join(',') ;

var reguha=/([А-Яа-я]+)([А-Яа-я]+|\d+)(\d)([А-Яа-я]+|\d+)/;
if(b1[i][0][k][1]==Number){
b1[i][0][k][l]=b1[i][0][k][l].replace(reguha,'$1,$4,$2,$3');
}

document.write(b1[i][0][k][l]);
}}}}

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

rgl 26.04.2013 10:57

Цитата:

Сообщение от dima*** (Сообщение 248123)
Подскажите,пожалуйста,поче му не работает,в этом месте:

var reguha=/([А-Яа-я]+)([А-Яа-я]+|\d+)(\d)([А-Яа-я]+|\d+)/;
if(b1[i][0][k][1]==Number){
b1[i][0][k][l]=b1[i][0][k][l].replace(reguha,'$1,$4,$2,$3');
}

Весь код не читал, только это место.
Но регуха у вас какая-то неправильная. Для начала, первый скобочки (там есть плючик) съедают все доступные буквы, а значит буквы во вторых скобочках бессмысленны, они сматчится никогда не могут.
var reguha=/([А-Яа-я]+)([А-Яа-я]+|\d+)(\d)([А-Яа-я]+|\d+)/;
//          ^ съедают ^ ^ бессм ^


Дальше, оставшаяся часть вторых скобок съедает все доступные цифры, значит третьи скобки сматчится никогда не могут, а значит и все выражение никогда не сматчится:
var reguha=/([А-Яа-я]+)([А-Яа-я]+|\d+)(\d)([А-Яа-я]+|\d+)/;
//                               ^съе^ ^^^

ksa 26.04.2013 14:07

Цитата:

Сообщение от dima***
поче му не работает,в этом месте

(многабукаф)
А что вообще хотел сделать?

dima*** 26.04.2013 17:20

rgl-спасибо.

А как же сделать,чтобы сначала слова,а потом цифры?
Т.е.

Родник,Низам,1,1
Горец,Авангард,3,1
...
ЧГУ,Терек,3,1

Родник,Низам,1,1
Горец,Авангард,2,1
...
ЧГУ,Терек,1,2

Родник,Низам,1,2
Горец,Авангард,2,0
...
ЧГУ,Терек,4,1

rgl 26.04.2013 18:32

Так, что ли?
function cifryVKonec( s ) {
  var reguha = /([A-Za-z]+)[^A-Za-z\d]+([A-Za-z]+|\d+)[^A-Za-z\d]+([A-Za-z]+|\d+)[^A-Za-z\d]+([A-Za-z]+|\d+)/;
  //                       ^^^^^^^это три раза^^^^^^^^
  return s.replace( reguha, function( a, b, c, d, e ) {
    if( /\d/.test( c ) && /\d/.test( d ) && ! /\d/.test( e ) )
      return [b,e,c,d].join(",");
    if( !/\d/.test( c ) && /\d/.test( d ) && /\d/.test( e ) )
      return [b,c,d,e].join(",");
    // else
      return a;
  } );
}
alert( cifryVKonec( "skadjflas - alsdfa, 5:8" ) );
alert( cifryVKonec( "sldfls 7 - 8 ldsfjkglsdf" ) );

(только буквы в регухе замените на русские)

dima*** 27.04.2013 09:10

rgl-спасибо!
В ваше коде понятно.А в моём случае непонятно.Я выложил часть кода.А так там есть вариант Родник1-1Низам,т.е слитно.Там 40 различных вариантов.
Поэтому,
var rega = /\d|[А-Яа-я]+/ig;-лучше оставить.И отдельно reguha сделать.

dmitriymar 27.04.2013 10:27

Цитата:

Сообщение от dima***
[А-Яа-я]

да откудаж, вы все, этот шаблон выскребаете?
Сотни раз уже было, что в последовательность для русских ё не попадает

dima*** 27.04.2013 10:34

Цитата:

Сообщение от dmitriymar (Сообщение 248303)
да откудаж, вы все, этот шаблон выскребаете?
Сотни раз уже было, что в последовательность для русских ё не попадает

Да,это понятно,что нужно писать [А-Яа-яЁё].Просто в данном случае буквы "ё" не присутствует,поэтому достаточно [А-Яа-я].

А как,насчёт,помочь?

dmitriymar 27.04.2013 12:23

Цитата:

Сообщение от dima***
А как,насчёт,помочь?

тебе уже rgl, помог

rgl 27.04.2013 17:10

Цитата:

Сообщение от dima*** (Сообщение 248301)
А так там есть вариант Родник1-1Низам,т.е слитно.

Ну так плюсики на звездочки заменить где надо
function cifryVKonec( s ) {
  var reguha = /([A-Za-z]+)[^A-Za-z\d]*([A-Za-z]+|\d+)[^A-Za-z\d]*([A-Za-z]+|\d+)[^A-Za-z\d]*([A-Za-z]+|\d+)/;
  //                       ^^^^^^^это три раза^^^^^^^^
  return s.replace( reguha, function( a, b, c, d, e ) {
    if( /\d/.test( c ) && /\d/.test( d ) && ! /\d/.test( e ) )
      return [b,e,c,d].join(",");
    if( !/\d/.test( c ) && /\d/.test( d ) && /\d/.test( e ) )
      return [b,c,d,e].join(",");
    // else
      return a;
  } );
}
alert( cifryVKonec( "skadjflas - alsdfa, 5:8" ) );
alert( cifryVKonec( "sldfls 7 - 8 ldsfjkglsdf" ) );
alert( cifryVKonec( "rodnik1 - 1nizam" ) );


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