2010-09-01 4 views
7

In Java, si potrebbe provare a creare un'espressione regolare che corrisponda all'URL stackoverflow.com utilizzando Pattern.compile("stackoverflow.com"). Ma questo sarebbe sbagliato perché il . ha un significato speciale nelle espressioni regolari. Il modo più semplice per risolvere questo problema è scrivere Pattern.compile(Pattern.quote("stackoverflow.com")) che viene fornito a: Pattern.compile("\\Qstackoverflow.com\\E") che "quotes" the entire string.Replicare la funzionalità di "Pattern.quote" di Java in un RegExp JavaScript

Voglio fare la stessa cosa in JavaScript, ma le espressioni regolari di JavaScript non assegnano alcun significato a \Q e \E e non sembra che ci sia un equivalente JavaScript, quindi non sono sicuro di come andare a proposito. Il mio primo pensiero (vedi la mia risposta qui sotto) è di mettere un backslash davanti a qualsiasi personaggio che abbia un significato speciale in un'espressione regolare di JavaScript, ma questo sembra potenzialmente soggetto a errori e sospetto che qualcuno possa conoscere un modo migliore.

Questo è per un'estensione per Firefox, quindi le soluzioni specifiche per Mozilla sono a posto.

+0

Per chi si imbatte in futuro ed è curioso, ho finito per risolverlo un modo diverso. Volevo una regex che corrispondesse a "" "seguita da una stringa particolare, seguita da" "'. Ho finito per cercare qualcosa come// "[^"] + "/" (citazione, un gruppo di caratteri non quotati, quindi un'altra citazione) e quindi passare attraverso tutte le corrispondenze per trovare quello che corrisponde alla stringa specifica – MatrixFrog

risposta

6

di approfondire il mio suggerimento, sarebbe simile a questa:

// A RegExp that matches all the characters which have a special meaning in a RegExp 
var regexpSpecialChars = /([\[\]\^\$\|\(\)\\\+\*\?\{\}\=\!])/gi; 

Non sono sicuro se questo è giusto, dal momento che alcuni personaggi (come ! e =) sembrano solo per avere un significato speciale in determinate situazioni. Ma supponendo che sia, allora si farebbe

var quotedURL = url.replace(regexpSpecialChars, '\\$1'); 

per sostituire, per esempio, tutti i $ 's con \$' s. Poi si può semplicemente costruire la RegExp da quotedURL:

var myRegExp = new RegExp(quotedURL, 'gi'); 
+0

AFAIK, sfugge tutto, ma anche le operazioni di lettere e cifre. Rende il risultato ancora meno leggibile, ma è un po 'più semplice (e IIRC c'era da qualche parte un'affermazione che funzionerebbe anche quando i caratteri aggiuntivi ottengono il loro significato speciale, ma non so più di che lingua si trattasse: D). – maaartinus

Problemi correlati