正则表达式:匹配倒数第二个字符

时间:2018-07-08 09:22:14

标签: javascript 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>");

谢谢:)

2 个答案:

答案 0 :(得分:3)

您可以使用

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

请参见regex demo

如果这些必须是数字,请用.替换\d

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

模式匹配

  • \d-一个数字
  • (?=\d?$)-后面是字符串的末尾或数字和字符串的末尾。

$&是一个替换反向引用,它引用字符串替换模式中的整个匹配值。

JS演示:

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)

您可以在最后一个分组之前添加另一个分组,该分组也匹配一个字符((.)),然后使用引用($1$2)包装每个分组:

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