• jgruber's avatar
    [regexp] Named capture support for string replacements · 17f13863
    jgruber authored
    This implements support for named captures in
    RegExp.prototype[@@replace] for when the replaceValue is not callable.
    
    Named captures can be referenced from replacement strings by using the
    "$<name>" syntax. A couple of examples:
    
    let re = /(?<fst>.)(?<snd>.)/u;
    "abcd".replace(re, "$<snd>$<fst>")  // "bacd"
    "abcd".replace(re, "$2$1")     // "bacd" (numbered refs work as always)
    "abcd".replace(re, "$<snd")    // SyntaxError (unterminated named ref)
    "abcd".replace(re, "$<42$1>")  // "cd" (invalid name)
    "abcd".replace(re, "$<thd>")   // "cd" (non-existent name)
    "abcd".replace(/(?<fst>.)|(?<snd>.)/u, "$<snd>")  // "cd" (non-matched capture)
    
    Support is currently behind the --harmony-regexp-named-captures flag.
    
    BUG=v8:5437
    
    Review-Url: https://codereview.chromium.org/2775303002
    Cr-Commit-Position: refs/heads/master@{#44171}
    17f13863
objects.cc 731 KB