передающая переменная к regexp в JavaScript [дубликат]

Я надеюсь, что понимаю ваш вопрос (если хотите, оставьте комментарий).

Если вы хотите иметь массив форм в качестве основных значений и только в том случае, если он пуст, принимает значение из второго массива, вы можете использовать комбинацию на array_filter и array_merge.

Рассмотрим следующий пример:

$form = array("km_user_first_name" => "Alice", "km_user_address" => "");
$row = array("km_user_first_name" => "Boby", "km_user_address" => "via pola");
$res = array_merge($row, array_filter($form));

Это выдаст:

Array
(
    [km_user_first_name] => Alice
    [km_user_address] => via pola
)

Я знаю, что я использую массив form второй, как сказано в документации PHP [115 ] (спасибо @Nick):

Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа будет перезаписывать предыдущее

blockquote>

Надеюсь, что помогает!

43
задан Community 23 May 2017 в 11:54
поделиться

3 ответа

Ваш regexp /{0}/gi, так как Вы создаете его из строки. И это не допустимое выражение. Необходимо выйти {в regexp, потому что он имеет особое значение в regexp синтаксисе, таким образом, это должно быть:

new RegExp('\\{'+i+'\\}', 'gi');

, который является /\\{0\\}/gi. Вам нужно к Escape выход \\ в строке.

56
ответ дан Community 26 November 2019 в 23:00
поделиться

Я думаю, что Ваша вторая строка, как предполагается,

reg = new RegExp('\{'+i+'\}', 'gi');

, но я не знаю, является ли это Вашей единственной проблемой или нет.

3
ответ дан Gareth 26 November 2019 в 23:00
поделиться

Я сильно поощрил бы Вас использовать функциональную форму String.replace () , чтобы решить Вашу проблему, вместо того, чтобы пытаться параметризовать regexp в для цикла, который выполняет итерации более чем {0}, {1}, и т.д.

, Другими словами, вместо того, чтобы искать '{0}' или '{1}', просто ищут '{([0-9] +)}' (т.е. {окружение} произвольного числа, и передайте функцию замене () функция для интеллектуальной замены этих выражений на основе числа между {}'s. Это позволяет Вам использовать литерал RegExp, который можно записать как / {([0-9] +)} / а не бездельничать с символами ESC в строках.

Что-то вроде этого:

s='the song says {0} little {1} little {2} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
  {return args[(+firstmatch)]; }
);

, который уступает

the song says zero little one little two little-endians

, Посмотрите этот подобный вопрос .

редактирование: если Вы хотите оставить в покое объекты, которые больше, чем длина Вашего args список, удостоверьтесь к проверке работоспособности число параметра:

s='the song says {0} little {1} little {2} little-endians,\n'+
  ' {3} little {4} little {5} little-endians';
args=['zero','one','two'];
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch)
  {var i = +firstmatch; return i < args.length ? args[i] : wholematch;}
);

, который уступает

the song says zero little one little two little-endians,
 {3} little {4} little {5} little-endians
6
ответ дан Community 26 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: