Je dois remplacer

 "wjjghwkjghwkjgh https://www.google.com jhgkwjhgkwhgk https://youtube.com"

Avec

 "wjjghwkjghwkjgh <a href='https://www.google.com'>https://www.google.com</a> jhgkwjhgkwhgk <a href='https://youtube.com'>https://youtube.com</a>";

J'ai déjà fait un brouillon https://jsbin.com/kosogijudo/1/edit?js , console avec le lien regex et un exemple de message pour vous aider

Je ne sais pas comment le faire, car si je crée une boucle, cela modifiera la première correctement, mais dans la deuxième itération, il sera à nouveau modifié à l'intérieur de la balise.

Je pense qu'il existe un moyen de spécifier une fonction de mappage qui prend link et génère <a href="link">link</a>

Soit dit en passant, tout cela parce que je dois utiliser https://github.com/jsdf/ react-native-htmlview sur react native pour afficher les liens dans les vues de texte. S'il existe une manière moderne de le faire dans React Native, ce sera génial aussi.

0
user6791424 16 avril 2018 à 14:16

4 réponses

Meilleure réponse

Vous pouvez utiliser la méthode replace en passant une fonction de remplacement comme deuxième paramètre. Plus de détails sur MDN sur les paramètres

La fonction de remplacement est appelée pour chaque correspondance et sa valeur de retour est utilisée pour remplacer la correspondance d'origine dans la chaîne. Voici un échantillon, j'espère que cela vous aidera

var regexp = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9]\.[^\s]{2,})/gi;

var test = 'wjjghwkjghwkjgh https://www.google.com jhgkwjhgkwhgk https://youtube.com'

var replaced = test.replace(regexp,function(match){
	return `<a href="${match}">${match}</a>`;
})

console.log(replaced); //wjjghwkjghwkjgh <a href="https://www.google.com">https://www.google.com</a> jhgkwjhgkwhgk <a href="https://youtube.com">https://youtube.com</a>
0
Chirag Ravindra 16 avril 2018 à 11:26

Vous pouvez essayer de la manière suivante:

var str = "wjjghwkjghwkjgh https://www.google.com jhgkwjhgkwhgk https://youtube.com";

str = str.split(' ');
str = str.map( function(s){
  if(s.startsWith('https://')){
    s = '<a href=' + '\"' +s + '\"' + '>' + s + '</a>'
  }
  return s;
}).join(' ');

console.log(str)
0
Mamun 16 avril 2018 à 12:10
  1. Vous n'encapsulez pas la chaîne correspondante dans une balise <a>
  2. Vous ne capturez pas l'URL (avec un groupe de capture Regex), donc 1 $ est faux
  3. Ajoutez l'indicateur g après votre expression régulière (globale), de sorte qu'il traite plusieurs URL dans la chaîne
const linkRegex = /(https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*))/g

let message = "wjjghwkjghwkjgh https://www.google.com jhgkwjhgkwhgk https://youtube.com";

message = message.replace(linkRegex, "<a href='$1'>$1</a>") // Wrap in <a>

console.log(message)
0
Jeremy Thille 16 avril 2018 à 11:29

Vous pouvez l'essayer

var string = "wjjghwkjghwkjgh https://www.google.com jhgkwjhgkwhgk https://youtube.com";
string.split(' ');
var answer = string.map(m => (m.includes('https') && [`<a href=${m}>${m}</a>`].join(m)) || m).join(' ');
1
Hassan Imam 16 avril 2018 à 13:56