Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   str.replace, не понимаю механизм глобальной замены (https://javascript.ru/forum/misc/51153-str-replace-ne-ponimayu-mekhanizm-globalnojj-zameny.html)

Scampada 26.10.2014 22:38

Цитата:

Сообщение от kostyanet (Сообщение 337704)
Ваша роль заключается в том чтобы мозги парить?

Да, моя роль заключается в том, чтобы пытаться решать задачи нетривиальным путем для тренировки алгоритмического мышления, а не совать в eval пользовательскую строку. Вообще, я предполагал, что форум -- это место, где дают ответы на добровольной основе, то есть если кому-то кажется, что ему парят мозги -- то он не отвечает. Если, конечно, это адекватный форум; мне казалось, что этот таков. Если я ошибся, то прошу поправить.:thanks:

Проще говоря, я не понял, в чем ценность данного ответа в теме.

Scampada 26.10.2014 22:40

Цитата:

Сообщение от рони (Сообщение 337707)
Scampada,
примерно так без скобок и синусов
function calc(str)
 	{
 	  str = str.replace(/\s+/g, '');
      var re = /(\d+(\.\d+)*)\!/;

 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b)
 	      {
 	        var temp = 1;
            b = parseInt(b);
            while(b) temp *= b--;
            return temp.toFixed(10).toString();
 	      }
 	    )
 	  };

     re = /(\d+\.?\d*)\^(\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return Math.pow(b, c).toFixed(10).toString();
 	      }
 	    )
 	  };
      re = /(-*\d+\.?\d*)\/(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (b / c).toFixed(10).toString();
 	      }
 	    )
 	  };

      re = /(-*\d+\.?\d*)\*(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (b * c).toFixed(10).toString();
 	      }
 	    )
 	  };
      re = /(-*\d+\.?\d*)\-(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (b - c).toFixed(10).toString();
 	      }
 	    )
 	  };
      re = /(-*\d+\.?\d*)\+(-*\d+\.?\d*)/;
 	  for (; re.test(str);) {str = str.replace(re,
      function (a, b, c)
 	      {
 	        return (+b + +c).toFixed(10).toString();
 	      }
 	    )
 	  };
 	  return str
 	}
 	alert([calc('2^2^2'),calc('2^2 + 2! -3^1'),calc('-5 + -5')])

Спасибо. Возьму на заметку.

bes 26.10.2014 23:58

Цитата:

Сообщение от Scampada
Вообще, я предполагал, что форум -- это место, где дают ответы на добровольной основе, то есть если кому-то кажется, что ему парят мозги -- то он не отвечает. Если, конечно, это адекватный форум; мне казалось, что этот таков. Если я ошибся, то прошу поправить.

да, ты ошибся, это только твои желания, каждый здесь по своей причине и делает то, что считает нужным, а адекватность можно оценить только будучи адекватным ;)

Scampada 27.10.2014 00:55

Цитата:

Сообщение от bes (Сообщение 337731)
да, ты ошибся, это только твои желания, каждый здесь по своей причине и делает то, что считает нужным, а адекватность можно оценить только будучи адекватным ;)

Ясно. Да не вопрос. То есть, если мне тоже захочется пофлудить, потроллить и пооскорблять, то можно?:write:

bes 27.10.2014 20:47

Цитата:

Сообщение от Scampada
Ясно. Да не вопрос. То есть, если мне тоже захочется пофлудить, потроллить и пооскорблять, то можно?

можно креститься, когда кажется :yes:

kostyanet 28.10.2014 03:32

Это называется токенизер, токенизатор - в основе любого парсера лежит распознавание токенов.

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

А если нужен только результат вычисления выражения, тогда eval и капец.


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