Regex: совпадение последнего и второго символов

Мне нужно обернуть два последних символа в строке в отдельном <span>:

-1:23 // This is what I have
-1:<span>2</span><span>3</span> // This is what I want

Следующее соответствует последнему символу - но как я могу сделать его вторым и последним?

str.replace(/(.$)/, "<span>$1</span>");

Благодаря :)

javascript,regex,

1

Ответов: 2


2 принят

Вы можете использовать

.

См. Демо-версию regex

Если они должны быть цифрами, замените .на d:

.replace(/d(?=d?$)/g, "<span>$&</span>")

Образец соответствует

  • d - цифра
  • (?=d?$) - за ним следует конец строки или цифры и конца строки.

Это $&замещающая обратная ссылка, которая ссылается на все значение соответствия из шаблона замены строк.

JS demo:

console.log("-1:23".replace(/.(?=.?$)/g, "<span>$&</span>"));
console.log("-1:23".replace(/d(?=d?$)/g, "<span>$&</span>"));

Теперь, чтобы сделать его более динамичным, вы можете использовать ограниченный (диапазон / интервал) квантификатор :

function wrap_chars(text, num_chars) {
  var reg = new RegExp(".(?=.{0," + (num_chars-1) + "}$)", "g");
  return text.replace(reg, "<span>$&</span>");
}
console.log(wrap_chars("-1:23", 1)); // wrap one char at the end with span
console.log(wrap_chars("-1:23", 2)); // wrap two chars at the end with span


1

Вы можете добавить другую группу до последней, которая также соответствует одному символу ( (.)), а затем обернуть каждую из них, используя ссылки ( $1и $2):

var str = '-1:23'.replace(/(.)(.)$/, '<span>$1</span><span>$2</span>')
console.log(str);

JavaScript, регулярное выражение,
Похожие вопросы