我需要将字符串中的最后两个字符包装在单独的<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>");
谢谢:)
答案 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);