Это просто происходит, если вы пытаетесь обработать массив как строку:
$arr = array('foo', 'bar');
echo $arr; // Notice: Array to string conversion
$str = 'Something, ' . $arr; // Notice: Array to string conversion
Массив не может быть просто echo
'd или сцепленным со строкой, потому что результат не очень хорошо определен. PHP будет использовать строку «Array» вместо массива и инициировать уведомление, чтобы указать, что это, вероятно, не то, что было задумано, и что вы должны проверять свой код здесь. Вы, вероятно, хотите что-то вроде этого:
echo $arr[0]; // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar
Или зациклите массив:
foreach($arr as $key => $value) {
echo "array $key = $value";
// displays first: array 0 = foo
// displays next: array 1 = bar
}
Если это уведомление появляется где-то, чего вы не ожидаете, это означает, что переменная, которую вы считали строка на самом деле является массивом. Это означает, что в вашем коде есть ошибка, из-за которой эта переменная становится массивом вместо ожидаемой строки.
Вам нужно дважды экранировать любые символы RegExp (один раз для косая черта в строке и один раз для регулярного выражения):
"$TESTONE $TESTONE".replace( new RegExp("\\$TESTONE","gm"),"foo")
В противном случае он ищет конец строки и «ТЕСТОН» (который никогда не находит).
Лично я не большой поклонник построения По этой причине в regexp используются строки. Необходимый уровень побега может привести к выпивке. Я уверен, что другие думают иначе и любят пить, когда пишут регулярные выражения.
С точки зрения интерпретации шаблона, нет никакой разницы между следующими формами:
/ pattern /
new RegExp («шаблон»)
Если вы хотите заменить литерал строка с использованием метода replace
, я думаю, вы можете просто передать строку вместо регулярного выражения в replace
.
В противном случае вам придется экранировать любые специальные символы регулярного выражения в сначала шаблон - может быть, так:
function reEscape(s) {
return s.replace(/([.*+?^$|(){}\[\]])/mg, "\\$1");
}
// ...
var re = new RegExp(reEscape(pattern), "mg");
this.markup = this.markup.replace(re, value);
Ваш шаблон регулярного выражения должен иметь модификатор g:
var pattern = /[somepattern]+/g;
обратите внимание на g в конце. он сообщает заменителю выполнить глобальную замену.
Также вам не нужно использовать объект RegExp, вы можете создать свой шаблон, как указано выше. Пример шаблона:
var pattern = /[0-9a-zA-Z]+/g;
шаблон всегда окружен символом / с обеих сторон - с модификаторами после последнего /, модификатор g является глобальным.
РЕДАКТИРОВАТЬ: Почему это важно, если шаблон является переменной? В вашем случае это будет работать следующим образом (обратите внимание, что шаблон все еще является переменной):
var pattern = /[0-9a-zA-Z]+/g;
repeater.replace(pattern, "1234abc");
Но вам нужно будет изменить функцию замены на это:
this.markup = this.markup.replace(pattern, value);