regex - Hur man undviker specialtecken i reguljära uttryck med javascript?
Jag behöver undvika de speciella tecknen i reguljära uttryck med JavaScript. Hur kan jag uppnå detta? All hjälp uppskattas.
Tack för ditt snabba svar. Men jag behöver undkomma alla specialtecken i reguljära uttryck. Jag har försökt med denna kod, men jag kan inte uppnå resultatet.
RegExp.escape=function(str)
{
if (!arguments.callee.sRE) {
var specials = [
'/', '.', '*', '+', '?', '|',
'(', ')', '[', ']', '{', '}', '\\'
];
arguments.callee.sRE = new RegExp(
'(\\' + specials.join('|\\') + ')', 'gim'
);
}
return str.replace(arguments.callee.sRE, '\\$1');
}
function regExpFind() {
<%--var regex = new RegExp("\\[munees\\]","gim");--%>
var regex= new RegExp(RegExp.escape("[Munees]waran"));
<%--var regex=RegExp.escape`enter code here`("[Munees]waran");--%>
alert("Reg : "+regex);
}
Vad är fel med den här koden? Vänligen vägled mig.
Svar #1
Använd tecknet \ för att undkomma ett tecken som har särskild betydelse i ett reguljärt uttryck.
För att automatisera det kan du använda detta:
function escapeRegExp(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
}
Uppdatering: Det finns nu ett förslag att standardisera denna metod, möjligen i ES2016: https://github.com/tc39/proposal-regex-escaping
Uppdatering: Det ovan nämnda förslaget avslogs (men en omskrivning för 2023 pågår), så fortsätt att implementera detta själv tills vidare.
Svar #2
Använd bakåtsnedstreck för att undkomma ett tecken. Till exempel:
/\\d/
Detta kommer att matcha \d istället för ett numeriskt tecken
Svar #3
Med \ undviker du specialtecken
Flyr specialtecken till bokstavlig och bokstavliga tecken till special.
T.ex:
/\(s\)/matchar ''(s)'' medan/\(\s)/matchar vilket blanksteg som helst och fångar matchningen.
Källa: http://www.javascriptkit.com/javatutors/redev2.shtml
