2012-11-29 9 views
15

Eventuali duplicati:
Javascript RegExp + Word boundaries + unicode charactersparola Regex confine b ha problemi con dieresi (i caratteri speciali in tedesco)

In regex ECMA Script (testato qui per riferimento: http://regexpal.com/) ottengo falsi positivi con limiti di parola (utilizzando \b) e caratteri di umlaut. Per esempio

regex \bPflanzen\b

non deve corrispondere "Pflanzenöl", ma lo fa. Se cambio lo ö in un oe, tutto funziona. Il Regex sembra non considerare le dieresi come parte delle parole, sebbene siano in molte lingue.

Qual è la soluzione migliore?

+2

... e la soluzione migliore è utilizzare XRegExp, come [questa risposta] (http://stackoverflow.com/a/10591266/20938) consiglia. –

risposta

11

I motori Regex hanno idee diverse su come funzionano le classi di caratteri stenografici. \b è strettamente legato a \w che è quasi inutile in quasi tutti i compiti di espressioni regolari, ma purtroppo si dimostra "abbastanza buono" per molti casi per giustificare la sua esistenza continua.

In questo caso, JavaScript considera solo ASCII [a-zA-Z0-9_] per \w e poiché \b corrisponde una posizione tra un personaggio di \w e qualcosa che non è si otterrà il comportamento osservato.

La soluzione più comune è di utilizzare Lookaround invece di \b:

(?<![a-zA-ZäöüßÄÖÜ])Pflanzen((?![a-zA-ZäöüßÄÖÜ])) 

Tuttavia, JavaScript anche non supporta lookbehind, quindi abbiamo bisogno di fare qualcosa di diverso:

(^|[^a-zA-ZäöüßÄÖÜ])Pflanzen(?![a-zA-ZäöüßÄÖÜ]) 

Quale sarebbe partita o l'inizio della stringa o un carattere non di quella classe. In ogni caso, è disordinato. È giunto il momento, JavaScript ottiene il corretto supporto per le espressioni regolari incluso Unicode e lookaround.

+0

Unisciti alla [comunità ECMAScript] (http://www.ecmascript.org/community.php) e dì la tua sul perché dovrebbe essere in ECMAScript ed 6, Harmony, ES Next, qualunque cosa. – RobG

+0

Penso che il "perché" sia abbastanza ovvio dato che quantità sempre maggiori di software (che deve anche gestire lingue diverse) vengono scritte in JS. La mancanza di un adeguato supporto Unicode è un'omissione grave e orribile da una lingua o dalla sua libreria standard in questi giorni. In ogni caso, non sono un autore di specifiche o standard. Non ho nemmeno la minima idea di JavaScript; Sarei la persona sbagliata per essere coinvolto. – Joey

Problemi correlati