2

I would very much appreciate some assistance from the community on replacing a string at xth position intervals, using javascript regex. For example, if the string length is 161 and the replacement text is <br />, regex would replace the string at the 40th, 80th, 120th, and 160th positions with this replacement text. Is this possible using regex?

Thank you very much.

user717236
  • 4,959
  • 19
  • 66
  • 102
  • 1
    While it may be possible with regex, why not use other techniques to do this? It seems to me that you want to insert something every (n % 40 == 0) position. – FailedDev Oct 28 '11 at 14:53
  • Yes, that is correct. Why not other techniques? Because my logic thinks regex would require less lines of code and could be the simplest. I'm open to other techniques, however. – user717236 Oct 28 '11 at 14:54
  • 1
    Less lines of code doesn't necessarily make it neither simpler nor more efficient. Just a thing to note. – FailedDev Oct 28 '11 at 14:59
  • Yes, thank you, I appreciate your advice. Note: That's why I said 'could' and not 'will' in my above comment. – user717236 Oct 28 '11 at 15:03

2 Answers2

4

A method to add <br /> at ever 40th position is by using the following line:

string = string.replace(/([\S\s]{40})/g , "$1<br />");

If you want to dynamically set the position use:

var positions = 40;
var pattern = new RegExp("([\\s\\s]{" + positions + "})", "g");
string = string.replace(pattern , "$1<br />");

Explanation of the code:

  1. The first argument of the replace function is a RegExp:
    • ([\S\s] = all non-whitespace and white-space characters = every character).
    • {40} = 40 characters
    • The g flag means: global match, ie: match every possible occurence
    • The parentheses inside the RegExp means: Create a group. This group can later be referred by $1 (first group)
  2. The second argument of the replace function contains $1<br />. That is: replace the full match by the first group ($1), and add <br /> to it.
Rob W
  • 341,306
  • 83
  • 791
  • 678
1
var str = "12345678901234567890";
var newStr = str.replace(/(.{5})/g,"$1<br/>");

for every 40, change the 5 to 40.

epascarello
  • 204,599
  • 20
  • 195
  • 236