Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: регулярное выражение на JS
Форумы портала PHP.SU » PHP » Регулярные выражения » регулярное выражение на JS

Страниц (1): [1]
 

1. kuzya - 14 Июня, 2007 - 17:04:34 - перейти к сообщению
Имеется следующая проблема - есть текст, например "1 f 1 1 g" дак вот в нём надо все "1" заменить например на "21" (в итоге дожно получится "21 f 21 21 g"). При этом надо сделать так, что бы цифра 2 подставлялась только к тем единицам к которым она ещё не приставлена. Вот не могу никак составить такое регулярное выражение типа "искать 1 перед которой не стоит 2".
Незнаю понятно или нет обьяснил, но если кто понял - помогите плиз.
2. valenok - 14 Июня, 2007 - 23:34:46 - перейти к сообщению
оно не будет проходить по строке два раза.
PHP:
скопировать код в буфер обмена
  1.  
  2. str = str.replace(/1/gi,"21");
  3.  

3. kuzya - 15 Июня, 2007 - 04:20:32 - перейти к сообщению
Цитата:

оно не будет проходить по строке два раза.

Дело в том что выражение раза 3-4 через функцию проходит.
4. valenok - 15 Июня, 2007 - 10:26:32 - перейти к сообщению
Ну тогда думаем думаем и приходим к выводу что нужно заменять комбинацию [пробел][один][пробел] на [пробел][два][один][пробел]
но так как в начале строки и вконце у нас нет пробелов перед и после однёрок, то придётся их сначала добавить вручную потом срезать,
так как я не помню как правильно использовать синтаксис регулярок в ява скриптах, а руководства далеко - можно сделать по хитрее.
Заменить все однёрки на 21 а потом заменить 22221 на 21

PHP:
скопировать код в буфер обмена
  1.  
  2. < script>
  3. var str = "1 f 1 1 g";
  4. var rep ='';
  5.  
  6. c = 522;
  7. for(i=0;i<c;i++){
  8.         str = str.replace(/1/gi,"21");  
  9.         rep = '2' + rep;
  10. }
  11.  
  12.  
  13. rep = rep + '1';
  14.  
  15.         var regexp = "("+rep+")";
  16.         var patern =  new RegExp(regexp,"ig");
  17.  
  18. str = str.replace(patern,"21");
  19.  
  20. alert(str);
  21. </script>
  22.  

\n\n(Добавление)
ещё вариант это следующей регуляркой:
PHP:
скопировать код в буфер обмена
  1.  
  2. <script>
  3. var str = "1 f 1 1 g";
  4.  
  5. c = 12;
  6. for(i=0;i<c;i++){
  7.         str = str.replace(/(^1)|( 1 )|( 1$)/," 21 ");
  8. }
  9.  
  10. alert(str);
  11. </script>
  12.  

Тоесть заменять однёрку в начале строки, пробел один пробел в середине и пробел 1 в конце.
Вопрос только на что заменять =)
Вариант выше оставляет лишние пробелы.
Его можно разделить на три отдельных регулярки также:

PHP:
скопировать код в буфер обмена
  1.  
  2. <script>
  3. var str = "1 f 1 1 g";
  4. var rep ='';
  5.  
  6. c = 12;
  7. for(i=0;i<c;i++){
  8.         str = str.replace(/(^1)/,"21");
  9.         str = str.replace(/ 1 /," 21 ");
  10.         str = str.replace(/( 1$)/," 21");
  11. }
  12.  
  13.  
  14.  
  15.  
  16. alert(str);
  17. </script>
  18.  
5. kuzya - 15 Июня, 2007 - 21:48:48 - перейти к сообщению
Спс, щас попытаюсь переварить вышеописанное.=)

 

Powered by ExBB FM 1.0 RC1