Убедитесь, что сценарий содержит
<?php
перед кодом, который должен быть выполнен. Между <?
и php
в этом не должно быть пробелов.
Вероятно, было бы проще использовать регулярное выражение и .replace
: захватить два символа в отдельных группах захвата, добавить первый символ в строку и заменить вторым символом. Затем у вас будет первая половина нужного вам вывода в одной строке, а вторая в другой: просто объедините их вместе и верните:
function encrypt(text) {
let removedText = '';
const replacedText1 = text.replace(/(.)(.)?/g, (_, firstChar, secondChar) => {
// in case the match was at the end of the string,
// and the string has an odd number of characters:
if (!secondChar) secondChar = '';
// remove the firstChar from the string, while adding it to removedText:
removedText += firstChar;
return secondChar;
});
return replacedText1 + removedText;
}
console.log(encrypt('This is a test!'));
Довольно просто с помощью .reduce()
создать два массива, которые вам нужны.
function encrypt(text) {
return text.split("")
.reduce(({odd, even}, c, i) =>
i % 2 ? {odd: [...odd, c], even} : {odd, even: [...even, c]}
, {odd: [], even: []})
}
console.log(encrypt("This is a test!"));
Их можно преобразовать в строки, используя .join("")
, если хотите.
Я думаю, вы были на правильном пути. То, что вы пропустили - замена, это либо строка, либо RegExp.
Метод replace () возвращает новую строку с некоторыми или всеми совпадениями шаблона, замененными заменой. Шаблон может быть строкой или RegExp, а замена может быть строкой или функцией, вызываемой для каждого совпадения. Если pattern является строкой, будет заменено только первое вхождение.
blockquote>Источник: String.prototype.replace ()
Если вы заменяете значение (а не регулярное выражение), только первый экземпляр значение будет заменено. Чтобы заменить все вхождения указанного значения, используйте глобальный модификатор (g)
blockquote>Источник: Метод JavaScript String replace ()
Так что мое предложение будет продолжить с заменой и передать правильный RegExp в функцию, я думаю, вы можете понять из этого примера - это удаляет каждую секунду вхождения для char 't':
[113 ]let count = 0; let testString = 'test test test test'; console.log('original', testString); // global modifier in RegExp let result = testString.replace(/t/g, function (match) { count++; return (count % 2 === 0) ? '' : match; }); console.log('removed', result);
0ответ дан norbitrial 25 March 2019 в 17:35поделиться