2010-09-12 5 views
5

Ho un'espressione regolare JavaScript che fondamentalmente trova le parole di due lettere. Il problema sembra essere che interpreta i caratteri accentati come limiti di parole. In effetti, sembra cheCome posso creare un'espressione regolare che tenga conto dei caratteri accentati?

Un limite di parola ("\ b") è un punto tra due personaggi che ha un "\ w" su un lato di essa e un "\ W" sul altro lato (in qualsiasi ordine), contando i caratteri immaginari su l'inizio e la fine della stringa come corrispondente a "\ W". AS3 RegExp to match words with boundry type characters in them

E poiché

\ w corrisponde a qualsiasi alfanumerico caratteri (caratteri di parola) tra cui sottolineatura (abbreviazione di [a-zA-Z0-9_]). \ W corrisponde a qualsiasi non-parola caratteri (abbreviazione di [^ a-zA-Z0-9_]) http://www.javascriptkit.com/javatutors/redev2.shtml

caratteri accentati, ovviamente, non sono presi in considerazione. Questo diventa un problema con parole come Montréal. Se lo é è considerato un limite di parole, quindi al è una parola di due lettere. Ho provato a creare la mia definizione di un limite di parole che consentirebbe caratteri accentati, ma visto che un confine di parole non è nemmeno un personaggio, non so esattamente come trovarlo.

Qualsiasi Aiuto?

Ecco il codice JavaScript in questione, che cerca e trova userInput due lettere parole utilizzando l'espressione regolare re_state:

var re_state = new RegExp("\\b([a-z]{2})[,]?\\b", "mi"); 
var match_state = re_state.exec(userInput); 
document.getElementById("state").value = (match_state)?match_state[1]:""; 

risposta

-3

Hai impostato JavaScript per poter utilizzare non ASCII? Ecco una pagina che suggerisce di stabilire JavaScript per poter utilizzare UTF-8: http://blogs.oracle.com/shankar/entry/how_to_handle_utf_8

Dice:

aggiungere un attributo charset (charset = "utf-8") per i tag di script nella pagina padre:

script type="text/javascript" src="[path]/myscript.js" charset="utf-8" 
+0

che non cambia nulla ... – Shawn

+0

Sì, l'attributo type non è nemmeno in HTML5 come esso isn 'supportato dai browser, è un errore che qualcuno ha fatto interpretando le specifiche. Il meta tag charset funziona, ma il charset nei collegamenti non è una cosa reale. –

+0

@Rich Bradshaw: Ho nella mia sezione principale. È questo che vuoi dire? – Shawn

4

Mentre espressioni regolari JavaScript riconoscono i caratteri non ASCII, in alcuni casi (come 012.), è irrimediabilmente inadeguato quando si tratta di \w e \b. Se vuoi che funzionino con qualcosa che vada oltre i caratteri ASCII, dovrai utilizzare una lingua diversa o installare la libreria XRegExp di Steve Levithan con lo Unicode plugin.

A proposito, c'è un errore nella regex.Si dispone di un \b dopo la virgola finale facoltativa, ma dovrebbe essere di fronte:

"\\b([a-z]{2})\\b,?" 

Ho anche tolto le parentesi quadre; avresti bisogno solo di quelli se la virgola avesse un significato speciale nelle espressioni regex, che non è così. Ma ho il sospetto che non sia necessario che corrisponda alla virgola; \b dovrebbe essere sufficiente per assicurarti di essere alla fine della parola. E se non avete bisogno la virgola, non è necessario il gruppo di cattura o:

"\\b[a-z]{2}\\b" 
+0

@Alan Moore: Qual è la differenza tra l'utilizzo del letterale e del costruttore? La differenza che ho riscontrato è che se utilizzo il costruttore, posso aggiungere le corrispondenze delle espressioni regolari precedenti al mio regexp ... ad esempio: var re_address = new RegExp (match_buildingNumber [0] + match_street [0] + match_city [0] + "?", "mi"); Quel genere di cose, che è, per la mia conoscenza, impossibile con un letterale regexp ... – Shawn

+0

Ok, se hai una buona ragione per usare il costruttore, usa assolutamente. Volevo solo assicurarmi di essere a conoscenza dell'opzione regex-letteral. –

+0

@Alan Moore: ok grazie! Ma sono ancora un po 'curioso .. Qual è la differenza tra i due? Perché si dovrebbe preferire l'uso del letterale quando possibile? Inoltre, ho scaricato XRegExp e il plugin Unicode, ma continuo a non vedere come usarlo per quello che voglio. Immagino che ci sarebbe una Lm (lettera modificata) da qualche parte lì dentro? – Shawn

Problemi correlati