2010-09-24 4 views
2


J'ai déjà lu tous les articles ici qui touchent un problème similaire, mais toujours pas de solution de travail. Dans mon cas, je veux envelopper chaque mot d'une chaîne avec une durée. Les mots contiennent des caractères spéciaux comme « AUO ... »Wordwrap Regex avec des caractères UTF8 dans JS

ce que je fais en ce moment est:

var textWrap = text.replace(/\b([a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+)\b/g, "<span>$1</span>"); 

Mais ce qui se passe est que si l'AUN ou quel que soit le caractère non-ascii est à la fin ou au début, il agit également comme une frontière. Être dans un mot ces caractères n'agissent pas comme une frontière.

'Ärmelkanal' becomes Ä<span>rmelkanal</span> but should be <span>Ärmelkanal</span> 
'Käse'works fine... becomes <span>Käse</span> 
'diré' becomes <span>dir</span>é but should be <span>diré</span> 

Tout conseil serait très apprécié. J'ai besoin de le faire sur le client :-(BTW ai-je mentionné que je déteste les expressions régulières ;-)

Merci beaucoup!

Répondre

1

Le problème est que JavaScript reconnaît les limites de mots uniquement avant/après les lettres ASCII (et les chiffres/traits de soulignement). Il suffit de laisser tomber les ancres \b et cela devrait fonctionner.

result = subject.replace(/[a-zA-Z0-9ßÄÖÜäöüÑñÉéÈèÁáÀàÂâŶĈĉĜĝŷÊêÔôÛûŴŵ-]+/g, "<span>$&</span>"); 
+0

Ça a l'air horrible ;-) Mais ça marche Merci beaucoup très beaucoup !!! Et votre solution est intelligente. Merci pour la bonne explication !!! – Bosh

Questions connexes