javascript - Säännöllisen lausekkeen syntaksivirhe


Luen luon regexin dynaamisesti.

    var link = "www.google.com";
    var reg = '^'+link+'{1}|(?<=\s)'+link+'{1}(?=\s)|'+link+'{1}$';
    console.log(reg);
    var result = new RegExp(reg, 'g');

Saan tämän virheen

Uncaught SyntaxError: Invalid regular expression: /^www.google.com{1}|(?<=s)www.google.com{1}(?=s)|www.google.com{1}$/: Invalid group

Tässä on luotu säännöllinen lauseke:

^www.google.com{1}|(?<=s)www.google.com{1}(?=s)|www.google.com{1}$

Vastaus #1

JavaScriptin regex-moottori ei tukenut look-behind-malleja lainkaan ennen kuin ECMAScript 2018 julkaistiin.

Nyt, jos käytät tätä Chromessa, se ei enää aiheuta virhettä:

var link = "www.google.com";
var reg = '^'+link+'{1}|(?<=\s)'+link+'{1}(?=\s)|'+link+'{1}$';
console.log(reg);
var result = new RegExp(reg, 'g');

Toinen asia: sinun on kaksinkertaisesti poistettava merkintä \ RegExp-rakentajan sisällä.

Mitä yrität saavuttaa, on saada URL vastaamaan sanarajoja.

Yritä käyttää

RegExp.escape= function(s) {
    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

var reg = '\\b'+RegExp.escape(link)+'\\b';

Koodi :

RegExp.escape= function(s) {
        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
    };

var link = "www.google.com"
var reg = '\\b'+RegExp.escape(link)+'\\b';
alert(new RegExp(reg, "g"));

Huomautus Lisään RegExp.Escape paetakseen erikoismerkit argumenteissa, jotka annetaan RegExp-konstruktorille (esim. . täytyy olla \\.).

Vastaus #2

JavaScript ei tue lookbehind-ryhmiä.

Sen lisäksi, säännöllinen lausekkeesi rakennetaan merkkijonoista. Sinun täytyy varmistaa, että säännöllisen lausekkeen metamerkit "selviävät" merkkijonovakion jäsentämisprosessista, ja erityisesti sinun \s täytyy ilmaista muodossa \\s.

Huomaa myös, että URL-osion .-merkit tulkitaan regexin "jokerimerkiksi", jos et lisää niiden eteen \\.

Lopulta, ei ole selvää, mitä odotat niiden {1} asioiden tekevän; JavaScriptissä se vastaa merkki⟨jonoa {1}.