Вы можете использовать квадратную скобку для генерации ключа:
slotObj[slotId] = {
['slotContent' + i]: { // <-- made unique using iterator ;)
'templateNo': assetItem.dataset.template,
'assetId': assetItem.dataset.contentId
}
}
Используйте s
модификатор:
$template = preg_replace( $'/\{a\}([.\n]+)\{\/a\}/s', 'X', $template, -1, $count );
// ^
echo $count;
Из http://www.regular-expressions.info/dot.html:
"Точка соответствует отдельному символу, не заботясь, каков тот символ. Единственным исключением являются символы новой строки".
необходимо будет добавить запаздывание/s флаг к выражению.
Я думаю, что Вы имеете больше проблем, чем просто точка не соответствие новым строкам, но позволяете мне запуститься с рекомендации форматирования. Можно использовать примерно любой знак пунктуации в качестве regex разделителя, не только наклонной черты (' / '). При использовании другого символа Вы не должны будете выходить из наклонных черт в regex. Я понимаю, что '%' популярен среди PHPers; это сделало бы Ваш аргумент шаблона:
'%\{a\}([.\n]+)\{/a\}%'
Теперь, причина, что regex не работал, поскольку Вы предназначили, то, потому что точка теряет свое особое значение, когда это появляется в классе символов (квадратные скобки) - так [.\n]
просто соответствует точке или переводу строки. То, что Вы искали, было (?:.|\n)
, но я рекомендовал бы соответствовать возврату каретки, а также переводу строки:
'%\{a\}((?:.|[\r\n])+)\{/a\}%'
Поэтому слово "новая строка" может относиться к стилю Unix "\n", стиль Windows "\r\n", или более старый стиль Mac "\r". Любая данная веб-страница может содержать любой из тех или смесь двух или больше стилей; соединение "\n" и "\r\n" очень распространено. Но с/s режимом (также известный как одна строка или режим DOTALL), Вы не должны волноваться об этом:
'%\{a\}(.+)\{/a\}%s'
Однако существует другая проблема с исходным regex, это все еще присутствует в этом: +
является жадным. Это означает, если существует больше чем один {a}...{/a}
последовательность в тексте, в первый раз, когда Ваш regex применяется, он будет соответствовать всем им, сначала {a}
к последнему {/a}
. Самый простой способ зафиксировать, который должен сделать +
нежадный (иначе, "ленивый" или "отказывающийся") путем добавления вопросительного знака:
'%\{a\}(.+?)\{/a\}%s'
Наконец, я не знаю, что сделать из '$' перед вводной кавычкой Вашего аргумента шаблона. Я не делаю PHP, но это похоже на синтаксическую ошибку мне. Если бы кто-то мог бы обучить меня этому вопросу, я ценил бы его.