-1
votes

Une regex dans le défi JavaScript

J'ai des chaînes qui ressemblent à ceci: xxx

ou un autre exemple est xxx

etc

i Voudrais savoir s'il existe un moyen d'utiliser une regreg pour une recherche et de remplacer une action qui trouvera la dernière occurrence du caractère de soulignement de la chaîne (comme les exemples montrent que ce n'est pas un numéro fixe), puis allez à la fin. du mot et appendez une autre chaîne à elle.

par exemple sub_tes_prod_feature devient sub_test_prod_feuture_typed .

Il pourrait y avoir plusieurs occurrences de Celles-ci soient appelées mots-clés dans une page complète de texte.

, espérons que quelqu'un a une bonne idée, je ne suis pas le meilleur avec regex et la recherche régulière et remplacer le code avec indexof, substrings, etc. jusqu'à présent n'a pas été échouer en toute sécurité dans de grandes quantités de texte.

merci!


4 commentaires

HM ne peut-il pas simplement ajouter votre texte à la chaîne avec un opérateur de concaténation simple? Je ne vois pas pourquoi vous devez utiliser REGEXP? Comme, list_test_prod_01 doit être list_test_prod_01_typed ou list_test_prod_typed ?


Je vous suggère d'ajouter un échantillon où le soulignement importe réellement: dans le seul échantillon de sortie d'entrée -> que vous avez fourni, il semble que votre problème puisse simplement être résolu en concaténant une chaîne à la fin de l'entrée.


Je m'attendrais à voir des regexp dans une question marquée avec [regex], mais non ..?


Le problème revient vraiment à trouver n'importe quel mot sur une limite de mot constitué de [a-za-z _] avec au moins un _ (que cela ne puisse pas être le caractère final est non explicit à partir de la déclaration de problème), puis ajouté _tdédé .


3 Réponses :


1
votes

Utilisation de JS, essayez

var result = 'a_b_c d_e f_g_ hij k_l_m,n_o_p_q _xyz'
             .replace(/(\b[a-z]+(_[a-z]+)+\b)/gi, '$1_typed');
console.log(result); // "a_b_c_typed d_e_typed f_g_ hij k_l_m_typed,n_o_p_q_typed _xyz"

var result2 = 'a_b_c d_e f_g_ hij k_l_m,n_o_p_q _xyz'
             .replace(/(\b[a-z]*(_[a-z]+)+\b)/gi, '$1_typed');
console.log(result2); // "a_b_c_typed d_e_typed f_g_ hij k_l_m_typed,n_o_p_q_typed _xyz_typed"


2 commentaires

Qu'en est-il du mot suivant: _xyz ?


Exclu des résultats exprès. Mais s'il doit être remplacé aussi bien, alors c'est encore plus simple :)



0
votes

Essayez ceci:

"sub_test_prod_feature  xxxx sub_test_prod_feature".replace(/_(\w+)/gi, "$1_typed")
"subtest_prod_feature_typed  xxxx subtest_prod_feature_typed"


5 commentaires

\ w inclut le caractère _ dans le cas de sub_tes_prod_feature 1 $ est test_prod_feature , donc ça marche quand même. Cependant, il n'est pas clair de la déclaration de problème si _ ne peut pas être le caractère final du mot (rien dans l'instruction ne dit qu'il ne peut pas). Votre code ne correspondra pas au abc _ .


Bien repéré. Le remplacement de la + avec un * résoudra cette limitation.


De plus, \ w correspond à des éléments en plus des caractères alpha, tels que des chiffres. [A-Z] pourrait être un meilleur candidat.


Je suppose que tout se résume à l'état actuel de cette demande "Cette question a besoin de détails ou de clarté."


Exactement juste !!



0
votes

console.log('_def abc_def abc_def_xyz abc_'.replace(/((?:\b[a-z_]*)_[a-z]+\b)/gi, '$1_typed'))


0 commentaires