Bonjour,

je suis une grosse larve avec les expressions régulières.
j'essaye de surligner certains mots dans un texte à l'aide d'expressions régulières en évitant de sélectionner le mot s'il est dans un tag HTML (texte présent dans une DIV nommée).
je me heurte à de gros soucis car FF et IE ne se comportent pas de la même façon (une même pattern ne donne pas du tout la même chose).
j'ai donc un script qui
1/ regarde si on est sous IE ou non
2/ applique les expressions régulières qui vont bien (mot entier seulement, toutes les occurences, pas dans un tag HTML)

je ne m'en sors pas !!!!

merci de vos lumières
Nicolas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
// ajout de l'italique pour navigateurs IE
function AddItalicIE(pElementID, pKeyword){
  var pOrigine = document.getElementById(pElementID).innerHTML; 
  var pNew = "";
  var pRegExpKeyword = "(" + pKeyword + ")";              // toute occurence du mot clef (OK IE + FF)
  var pRegExpFullKeyword = "(\b" + pKeyword + "\b)";          // isole les mots entiers seulement (1 fois sous FF, rien IE)
  var pRegExpLink = "(<a[^>]*>(" + pKeyword + ")</a>)";        // dans les liens seuls (OK IE, pas FF)
  var pRegExpNoTag = "([^\<]*)(\b" + pKeyword + "\b)([^\>]*)";    // les occurences en dehors des balises ???
  var reg= RegExp(pRegExpKeyword+"|"+pRegExpLink, "gi");
  var RegTab = pOrigine.split(reg);
  for(i=0; i<RegTab.length; i++){
    if(i != RegTab.length-1){
      // pas le dernier élément du tableau, on ajoute l'italique avec le mot-clef
      pNew += RegTab[i] + '<i>'+pKeyword+'</i>';
    } else {
      // dernier élément du tableau, on n'ajoute pas l'italique avec le mot-clef
      pNew += RegTab[i];
    }
  }
  document.getElementById(pElementID).innerHTML = pNew;
}
// ajout de l'italique pour navigateurs non IE
function AddItalicFF(pElementID, pKeyword){
  var pOrigine = document.getElementById(pElementID).innerHTML; 
  var pNew = "";
  var pRegExpKeyword = "(" + pKeyword + ")";              // toute occurence du mot clef (OK IE + FF)
  var pRegExpFullKeyword = "(\b" + pKeyword + "\b)";          // isole les mots entiers seulement (1 fois sous FF, rien IE)
  var pRegExpLink = "(<a[^>]*>(" + pKeyword + ")</a>)";        // dans les liens seuls (OK IE, pas FF)
  var pRegExpNoTag = "([^\<]*)(\b" + pKeyword + "\b)([^\>]*)";    // les occurences en dehors des balises ???
  var reg= RegExp(pRegExpKeyword+"|"+pRegExpLink, "gi");
  var RegTab = pOrigine.split(reg);
  for(i=0; i<RegTab.length; i++){
    pNew += RegTab[i].replace(pKeyword, '<i>'+pKeyword+'</i>');
  }
  document.getElementById(pElementID).innerHTML = pNew;
}
// ajout de l'italique
function AddItalic(pElementID, pKeyword, pLinkHTMLBody){
  if( (navigator.userAgent.toLowerCase().indexOf('msie') + 1)){
    AddItalicIE(pElementID, pKeyword);
  } else {
    AddItalicFF(pElementID, pKeyword);
  }
}