Search code examples
javascriptregexsplitregex-lookarounds

Regex positive lookbehind alternative for word wrap


I'm using regex in JavaScript to split a long string and force a word wrap, but learned that some browsers (Safari in particular) don't support positive lookbehinds. Is there a more browser-friendly way to get the same result as this:

  if (text.length > 45) {
    return text.split(/(?<=^(?:.{45})+)(?!$)/).join("\r\n");
  }

Solution

  • Use

    return text.replace(/(.{45})(?!$)/g, "$1\r\n");
    

    See regex proof.

    EXPLANATION

    NODE                     EXPLANATION
    --------------------------------------------------------------------------------
      (                        group and capture to \1:
    --------------------------------------------------------------------------------
        .{45}                    any character except \n (45 times)
    --------------------------------------------------------------------------------
      )                        end of \1
    --------------------------------------------------------------------------------
      (?!                      look ahead to see if there is not:
    --------------------------------------------------------------------------------
        $                        before an optional \n, and the end of
                                 the string
    --------------------------------------------------------------------------------
      )                        end of look-ahead