最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - Regex: match last and second-last character - Stack Overflow

matteradmin7PV0评论

I need to wrap the two last characters in a string in a separate <span>:

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

The following matches the last character – but how can I make it match the second last as well?

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

Thanks :)

I need to wrap the two last characters in a string in a separate <span>:

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

The following matches the last character – but how can I make it match the second last as well?

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

Thanks :)

Share Improve this question asked Jul 8, 2018 at 9:22 Tonald DrumpTonald Drump 1,3961 gold badge21 silver badges38 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 3

You may use

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

See the regex demo

If these must be digits, replace . with \d:

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

The pattern matches

  • \d - a digit
  • (?=\d?$) - that is followed with an end of string or a digit and end of string.

The $& is a replacement backreference that references the whole match value from the string replacement pattern.

JS demo:

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

Now, to make it more dynamic, you may use a limiting (range/interval) quantifier:

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

You can add another group before the last one, which also matches a single character ((.)), then wrap each of them using references ($1 and $2):

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

Post a comment

comment list (0)

  1. No comments so far