(Javascript) Disons qu'il y a une chaîne:

str = "The goat he wanted was the grey one"

J'essaye de faire:

str = str.replace('he', 'she');

Le résultat que j'obtiens est "La chèvre qu'elle voulait était la grise". Cependant, le résultat que je veux est "La chèvre qu'elle voulait était la grise"

Comment pourrais-je changer «il» en «elle», mais aussi ne pas remplacer le «il» dans le mot «le»?

0
webdesignnoob 3 nov. 2020 à 22:16

5 réponses

Meilleure réponse

Changer la

str.replace('he','she');

Avec

str.replace(/\she/),'she');

Le \s représente un espace, donc (en supposant que la chaîne suit la grammaire anglaise appropriée), il ne remplacerait le mot "he" que s'il y a un espace devant lui (ce qui devrait être le cas car vous mettez un espace entre chaque mot ).

2
Reality 3 nov. 2020 à 19:23
import re

str1 = "The goat he wanted was the grey one"

str2 = re.sub(r'\bhe\b', 'she', str1)

print(str2)

https://repl.it/repls/PowerlessHonorableEvent#main.py

-1
Mohamed Moselhy 3 nov. 2020 à 19:22

Utilisez une limite de mot d'expression régulière. Placez le texte que vous essayez de remplacer entre / \ b \ b /. Comme

str = str.replace('/\bhe\b/','she');
0
berkobienb 3 nov. 2020 à 19:31

Vous pouvez essayer d'utiliser un objet RegExp: str.replace(/(^|[^A-Za-z\-_0-9])he($|[^\-_A-Za-z0-9])/, '$1she$2'). Cela n'isole pas «il» de toutes les lettres Unicode. Vous pourriez envisager de consulter mon ancienne UnicodeGeneralCategory tenter de valider les caractères des lettres ou d'effectuer une autre recherche. sur NPM pour la manipulation de texte.

0
Hydroper 3 nov. 2020 à 19:23
str = "The goat he wanted was the grey one"
str = str.replace(new RegExp('\\b' + 'he' + '\\b'), 'she');
alert(str);

Utilisez plutôt des limites de mots, en mettant des bornes vers le haut. Voir l'exemple ci-dessus

Et un JSfiddle

http://jsfiddle.net/1s73qax8/

3
Hydroper 7 nov. 2020 à 21:55