Je suis très nouveau dans Regex et je ne suis pas sûr de faire la pincée d'un essai à partir d'une très grande chaîne à l'aide de Regex.
Supposons que la chaîne est la suivante:
FYI: Cette chaîne serait générée de manière dynamique des éléments différents de la base de données et du DOM. Je n'ai pas beaucoup de contrôle sur la façon dont il est créé. Em> p> Lorem Ipsum Dolor Sit Amet Amet, consecetur Adipisuring Elit. Voluptas Architecto Dicta Ameque Cumque, Aque, Labore Eos Nobis Earm Fuga Tempore officiis Empreuri Rerum Placeat. Perferendis, earm officiis Veniam Dicta Eius Aliquid, Similique Porro Quam Neam Intibus Nobis Velit Velit Debities. J'ai besoin d'obtenir le texte à l'intérieur de la portée qui a une itemPropa étiquetée itemnum. P> J'ai essayé cela, mais cela n'a pas fonctionné pour moi: P>
56789 span> Code> Labore EOS Nobis Earm Fuga Tempore officiis Empreuri Rerum Placeat. Perferendis, earm Officiis Veniam Dicta Eius Aliquid, Similique Porro Quam Quam NechestiBus Nobis Velit Debitis. P>
blockQuote> /\b(itemprop=\"sku\"")\b/g
4 Réponses :
Utilisation de RegEx LookbeHind pour p> itemProp = "itemnum"> code> et lookahead pour code> puis capturer tout ce qui est compris entre. const data = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.'
const res = data
.match(/(?<=itemprop\="itemNum"\>).+(?=\<\/)/)
//returns an array... get first value
.shift();
console.log(res);
Basé sur https://stackoverflow.com/a/14210948/3999647 vient de mettre à jour la regex et l'entrée
p>
function getMatches(string, regex, index) {
index || (index = 1); // default to the first capturing group
var matches = [];
var match;
while (match = regex.exec(string)) {
matches.push(match[index]);
}
return matches;
}
// Example :
var myString = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.';
var myRegEx = /(<span itemprop="\w+">)(\d+)(<\/span>)/g;
// Get an array containing the first capturing group for every match
var matches = getMatches(myString, myRegEx, 2);
// Log results
document.write(matches.length + ' matches found: ' + JSON.stringify(matches))
console.log(matches);une solution probable.
p>
let str = `Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.` let op = str.match(/<[^>]+>([^<]+)<\/[^>]+>/g).map(e=>e.replace(/.*?>(.*)<.*/, "$1")) console.log(op)
Une approche Pour atteindre l'objectif d'obtenir la valeur si vous n'avez pas nécessairement besoin d'utiliser regex, il serait nécessaire d'utiliser Domparser pour d'abord analyser la chaîne, puis obtenez l'élément à l'aide d'un QuerySelect code>: p> const str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptas architecto dicta amet cumque, atque, labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis. <span itemprop="itemNum">56789</span> labore eos nobis earum fuga tempore officiis excepturi rerum placeat. Perferendis, earum officiis veniam dicta eius aliquid, similique porro quam necessitatibus nobis velit debitis.';
const parser = new DOMParser();
const doc = parser.parseFromString(str, "text/html");
console.log(doc.querySelector('span[itemprop="itemNum"]').innerHTML)
Mathias cela affecterait-il le vrai Dom de quelque manière que ce soit? Je ne connais pas Domparser.
@Sergio Il n'affecte aucune manière sur le "vrai Dom", il crée essentiellement une nouvelle DOM (document) en mémoire que vous pouvez utiliser mais vous voulez
sucré! Je vais donner ça un aller.
L'analyse HTML avec un REG EXP n'est pas la meilleure chose à faire.
Pourquoi ne pas simplement obtenir innerhtml de l'élément de l'espace?
Parce que la chaîne n'est pas HTML par dise. c'est à l'intérieur d'un objet qui est créé de manière dynamique
@Epascarello Toute idée Comment éviter ça? Comme je l'ai mentionné ci-dessus cette chaîne complète qui contient HTML, elle est créée de manière dynamique
Pouvez-vous obtenir le HTML de cet objet? Et est-ce juste 1 gamme?
@Thefourthbird Je ne suis pas à la suite de votre question. Vous voulez dire cela en ciblant l'utilisation de QuerySelector?
Je suis désolé, oui c'est ce que je veux dire.
Je ne pense pas pouvoir, et corrigez-moi s'il vous plaît si je me trompe, car le HTML n'est pas dans le DOM. C'est à l'intérieur d'un objet.
Si c'est à l'intérieur d'un objet, existe-t-il une propriété pour accéder au HTML? Ensuite, vous pourriez utiliser un Domparser.
Mathias a suggéré que ci-dessous. Domparser affecterait-il le vrai Dom de quelque manière que ce soit?