Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помогите со скриптом. (https://javascript.ru/forum/misc/36284-pomogite-so-skriptom.html)

dima*** 10.03.2013 11:25

помогите со скриптом.
 
Как добавить "слону"-"розовый",а "щенку"-"весёлый",где их нет?

<script type="text/javascript"> 
arr=["щенок весёлый","слон ","щенок весёлый","слон розовый","щенок"];
reg=/(.+)(?:/s(.+))?/g;

</script>

ksa 10.03.2013 13:05

Цитата:

Сообщение от dima***
Как добавить "слону"-"розовый",а "щенку"-"весёлый",где их нет?

Как вариант...

var a=["щенок весёлый","слон ","щенок весёлый","слон розовый","щенок"];
var i;
for (i=0; i<a.length; i++) {
	a[i]=a[i].replace(/(слон|слон\s)$/gi,'$1 розовый')
	a[i]=a[i].replace(/(щенок|щенок\s)$/gi,'$1 весёлый')
};
alert(a);

Deff 10.03.2013 13:13

var arr=["щенок весёлый","слон","щенок весёлый","слон розовый","щенок"];
arr=arr.join(",").replace(/,щенок.*?(?=,|$)/g,',щенок весёлый').replace(/,слон.*?(?=,|$)/g,',слон розовый').split(',')
alert(arr)

Hekumok 10.03.2013 13:20

var arr = ["щенок весёлый", "слон ", "щенок весёлый", "слон розовый", "щенок"] ;
var reg = /^(слон|щенок) ?$/g ;
for(var i=0; i<arr.length; i++) arr[i] = arr[i].replace(reg, function(a, b) {
return b + " " + ((b=="слон") ? "розовый" : "веселый") ;
}) ;
alert(arr) ;

dima*** 10.03.2013 13:27

ksa,Deff,Hekumok-спасибо!
А если элементов в массиве очень много?Не только "щенок" и "слон".
Как сделать универсальный шаблон?

Akalenik 10.03.2013 13:43

Цитата:

Сообщение от dima*** (Сообщение 239797)
ksa,Deff,Hekumok-спасибо!
А если элементов в массиве очень много?Не только "щенок" и "слон".
Как сделать универсальный шаблон?

логично будет вместо "щенка" и "слона" поставить переменные и не заморачиваться

dima*** 10.03.2013 18:37

Так и не получается...:(

Deff 10.03.2013 18:42

Цитата:

Сообщение от dima***
ksa,Deff,Hekumok-спасибо!
А если элементов в массиве очень много?Не только "щенок" и "слон".
Как сделать универсальный шаблон?

Пример в студию ?, и потом, зачем в реале дублировать - удобнее исключать более короткие двухсловные?

Hekumok 10.03.2013 19:20

Цитата:

Сообщение от dima***
А если элементов в массиве очень много?Не только "щенок" и "слон".
Как сделать универсальный шаблон?

Например, так
var arr = ["щенок веселый", "щенок ", "слон", "слон розовый", "лиса хитрая", "волк ", "волк серый", "лиса"] ;
var m1 = ["щенок", "слон", "лиса", "волк"], m2 = ["веселый", "розовый", "хитрая", "серый"] ;
for(var i=0, l=arr.length; i<l; i++) {
 for(var j=0, len=m1.length; j<len; j++) {
  if(arr[i]==m1[j]||arr[i]==m1[j]+" ") arr[i] = m1[j]+" "+m2[j] ;
 } ;
} ;
alert(arr) ;

dima*** 10.03.2013 20:08

Hekumok,ну да,так!!!Спасибо!
А,если с помощью "регулярки"?
reg=/(.+)(?:/s(.+))?/g;

Т.е. $1=m1,а $2=m2.

Deff 10.03.2013 20:24

var arr = ["поросёнок","щенок веселый", "щенок", "слон", "слон розовый", "лиса хитрая", "волк", "волк серый", "лиса"] ;
var arr2=(",start,"+arr.join(',')+",end,").split(/,[^\s]*,/);arr2.pop();arr2.splice(0,1);arr2=arr2.join(',').split(/\s+/).join(':');
eval("var obj = {'" +(arr2.split(/([:,])/).join("'"))+"'}");

for(var i=0;i<arr.length;i++){
  if(obj[arr[i]])arr[i]+=' '+obj[arr[i]];
}
alert(arr)
,

dima*** 10.03.2013 20:45

А eval считается медленным?А через регу нельзя сделать?

Я закончил свой первый скрипт.Теперь оптимизирую,доделываю,подт ачиваю.

Спасибо огромное рони,danik.js и тебе огромное!!!:thanks: .Вы очень помогли-без вас бы не сделал...

Hekumok 10.03.2013 20:52

Цитата:

Сообщение от dima*** (Сообщение 239863)
Hekumok,ну да,так!!!Спасибо!
А,если с помощью "регулярки"?

var arr = ["щенок веселый", "щенок ", "слон", "слон розовый", "лиса хитрая", "волк ", "волк серый", "лиса"] ;
var m1 = ["щенок", "слон", "лиса", "волк"], m2 = ["веселый", "розовый", "хитрая", "серый"] ;
for(var i=0, l=arr.length; i<l; i++) {
 arr[i] = arr[i].replace(/^\S+ ?$/, function(a) {
  for(var j=0, len=m1.length; j<len; j++) {
   if(a==m1[j]||a==m1[j]+" ")
    return m1[j]+" "+m2[j] ;
  } ;
 }) ;
} ;
alert(arr) ;

Deff 10.03.2013 20:56

Hekumok,

var arr = ["поросёнок","щенок веселый", "щенок ", "слон", "слон розовый", "лиса хитрая", "волк ", "волк серый", "лиса"] ;
var m1 = ["щенок", "слон", "лиса", "волк"], m2 = ["веселый", "розовый", "хитрая", "серый"] ;
for(var i=0, l=arr.length; i<l; i++) {
 arr[i] = arr[i].replace(/^\S+ ?$/, function(a) {
  for(var j=0, len=m1.length; j<len; j++) {
   if(a==m1[j]||a==m1[j]+" ")
    return m1[j]+" "+m2[j] ;
  } ;
 }) ;
} ;
alert(arr) ;

Hekumok 10.03.2013 21:02

Deff,

var arr = ["поросёнок","щенок веселый", "щенок ", "слон", "слон розовый", "лиса хитрая", "волк ", "волк серый", "лиса"] ;
var m1 = ["щенок", "слон", "лиса", "волк"], m2 = ["веселый", "розовый", "хитрая", "серый"] ;
for(var i=0, l=arr.length; i<l; i++) {
 arr[i] = arr[i].replace(/^\S+ ?$/, function(a) {
  for(var j=0, len=m1.length; j<len; j++) {
   if(a==m1[j]||a==m1[j]+" ")
    return m1[j]+" "+m2[j] ;
  } ;
  return a ;
 }) ;
} ;
alert(arr) ;

Deff 10.03.2013 21:06

Hekumok, ☆

dima*** 10.03.2013 21:12

Смущает:
var m1 = ["щенок", "слон", "лиса", "волк"], m2 = ["веселый", "розовый", "хитрая", "серый"] ;
А если элементов в массиве-1000?

Deff 10.03.2013 21:22

dima***, Вытащил m1 - m2, ток во входной убрал лишние пробелы (Хотя m1m2 - информативней
var arr = ["поросёнок","щенок веселый", "щенок", "слон", "слон розовый", "лиса хитрая", "волк", "волк серый", "лиса"] ;
 var m1m2 =(",start,"+arr.join(',')+",end,").split(/,[^\s]*,/);
 m1m2.pop();m1m2.splice(0,1);
 var m1=m1m2.join(',').split(/\s.*?,/);
 var m2=m1m2.join(',').split(/(?:^|,).*?\s/);m2.splice(0,1);
alert(m1);
alert(m2);

Hekumok 10.03.2013 21:27

dima***, ну значит, будет цикл 1к раз проходить

dima*** 10.03.2013 21:31

Deff и Hekumok-спасибо большое!

рони 11.03.2013 22:08

dima***,
Вариант ...
var arr = "щенок веселый,щенок,слон,слон розовый,лиса хитрая,волк,волк серый,лиса,щенок",
 m = (arr.match(/[^,]+\s[^,]+/g)||[]).join(" ").split(" "), i = 0;
 for (  ; i < m.length; i += 2)
 var reg = RegExp("(,|^)" + m[i] + "(,|$)", "g"),
 arr = arr.replace(reg, "$1" + m[i] + " " + m[i + 1] + "$2");
 alert(arr.split(",").join("\n"));


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