javascript - Syntaxfel i reguljärt uttryck
Jag skapar ett regex dynamiskt.
var link = "www.google.com";
var reg = '^'+link+'{1}|(?<=\s)'+link+'{1}(?=\s)|'+link+'{1}$';
console.log(reg);
var result = new RegExp(reg, 'g');Jag får det här felet
Uncaught SyntaxError: Invalid regular expression: /^www.google.com{1}|(?<=s)www.google.com{1}(?=s)|www.google.com{1}$/: Invalid group
Här är den genererade regexen:
^www.google.com{1}|(?<=s)www.google.com{1}(?=s)|www.google.com{1}$Svar #1
JavaScript:s regexmotor stödde inte look-behinds överhuvudtaget innan ECMAScript 2018 släpptes.
Nu, om du använder detta i Chrome, kommer det inte att ge något fel nu:
var link = "www.google.com";
var reg = '^'+link+'{1}|(?<=\s)'+link+'{1}(?=\s)|'+link+'{1}$';
console.log(reg);
var result = new RegExp(reg, 'g');En annan sak: du måste dubbelt escape \ inom RegExp-konstruktorn.
Det du försöker uppnå är att få URL:en att matcha vid ordgränser.
Försök använda
RegExp.escape= function(s) {
return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};
var reg = '\\b'+RegExp.escape(link)+'\\b';
Kod :
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"));Obs Jag lägger till RegExp.Escape för att undvika specialtecken i de argument som skickas till RegExp-konstruktorn (t.ex. . måste vara \\.).
Svar #2
JavaScript stöder inte bakåtblickande grupper.
Förutom det byggs ditt reguljära uttryck upp från strängar. Du måste se till att dina reguljära uttryck-metatecken "överlever" processen med strängkonstantparsning, och särskilt måste ditt \s uttryckas som \\s.
Observera också att . tecknen i URL-delen av ditt mönster kommer att tolkas som regex "wildcard"-symbolen om du inte föregår dem med \\ också.
Slutligen är det inte klart vad du förväntar dig att de {1} sakerna ska göra; i JavaScript kommer det att matcha teckensekvensen {1}.
