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}.
