7
votes

JavaScript Regex Match uniquement des mots commençant par un caractère spécial spécifique

J'essaie de ne faire correspondre que des mots commençant par # en JavaScript, par exemple. Dans le texte d'échantillon suivant, seul #these doit correspondre.

J'ai besoin de faire correspondre uniquement des mots comme #these. Ignorer ceux comme @ # ceci,! #Ce et dans # ignorer.

Le plus proche que j'ai reçu est ici, xxx

ref: https://regex101.com/r/wu7sq0/114


4 commentaires

Utilisez une limite de blancspace - / (?: ^ | \ S) (# [A-Z0- 9] \ w +) / g .


désolé j'ai mal interprété la question, mettra à jour ce commentaire


L'utilisation de la limite des espaces blanche fonctionne presque, mais je me demande s'il y a quelque chose de plus parfait que j'utilise le motif pour rechercher et remplacer HTML


[] #these = whitelist (espace) ou [^ @! A-Z] #these = liste noire (@,!, A-Z)


4 Réponses :


1
votes

Pourquoi ne pas rechercher commencer ou avec de l'espace avant. Voir Regex / # | ^ #


1 commentaires

L'utilisation de la limite des espaces blanche fonctionne presque, mais je me demandais simplement s'il y a quelque chose de plus parfait.



7
votes

Utilisez une limite de blanchie (?: ^ | | \ s) code>:

p>

var rx = /(?:^|\s)(#[a-z0-9]\w*)/gi;
var s = "I need to match only words like #these. \nIgnore the ones like @#this , !#this and in#ignore.";
var results = s.match(rx).map(function(x) {return x.trim();}); // ES5
// var results = s.match(rx).map(x => x.trim()); // ES6
console.log(results);


5 commentaires

Utilisation de travaux de limite de WhitSpace, mais y a-t-il une solution parfaite pour cela? :) Merci!


Quel est le critère de "parfait"? Ne correspond à ces "#the" si non précédé des symboles exacts ?


Parfait == Débarrassez-vous de l'espace au début du match. Merci!


Vous l'avez déjà fait - attrapez le groupe capturé 1. Je pense que c'est le moyen le plus propre. Bien sûr, vous pouvez simplement couper chaque match si vous le souhaitez.


Une fois que le lookbehind est enfin pris en charge dans tous les navigateurs, vous pourrez utiliser S.Match (/ (? . Regardez Cette table . En ce moment, il est uniquement pris en charge en chrome et au nœud si le drapeau "Experimental JavaScript Caractéristiques" est défini.



1
votes

Je suis un peu changé votre regex pour obtenir ce que vous voulez. XXX

QUI SERA SEULE SEULEMENT #THESE, vous pouvez exclure ce que vous ne voulez pas en ajoutant entre le premier support carré


0 commentaires

1
votes

Vous pouvez essayer ceci,

p>

txt = "I need to match only words like #these. Ignore the ones like @#this , !#this and in#ignore."

console.log(/(^|\s)(#+\w+)/g.exec(txt))


0 commentaires