Affichage des articles dont le libellé est RegExp. Afficher tous les articles
Affichage des articles dont le libellé est RegExp. Afficher tous les articles

Remplace with regExp


html"<div> <h1> {{question}} </h1> 
<ul>
    <li>{{choice1}}</li>
    <li>{{choice2}}</li>
    <li>{{choice3}}</li>
    <li>{{choice4}}</li>
</ul>     
</div>"
randomChoise
 2
newCode"<div> <h1> {{question}} </h1> 
<ul>
    <li>{{choice1}}</li>
    <li class='selected'>{{choice2}}</li>
    <li>{{choice3}}</li>
    <li>{{choice4}}</li>
</ul>     
</div>"

RegExp

 RegExp: \d(?=(\d{3})+\.)

Un nombre suivi de 3 nombres (une ou plusieurs fois) et un point sans les consommer (?= ).

Remplacement: $& 

Correspond au chiffre \d qui correspond.

Match 10-11
Group 14-7332
Match 23-45
Group 14-7332


https://regex101.com/r/wwpOnj/1

regexp

 function normalizeDataKey(key) {

    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
  }

  console.log(normalizeDataKey("denisDupont")) // denis-dupont

regexp

  1.  const string = 'Favorite GitHub repos: dupontdenis/bureauwindows dupontdenis/HTML_TD3 v8/v8.dev',

  2. regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;

  3. for (const match of string.matchAll(regex)){
  4.   console.log(`${match[0]} at ${match.index} with '${match.input}'`);
  5.   console.log(`owner: ${match.groups.owner}`);
  6.   console.log(`repo:  ${match.groups.repo}`)
  7. }

Range

Opérations élémentaires :


console.log(/^0b[01]+$/i.test("0b0011"));

console.log(/^0b[01]+$/i.test("0b0013"));
console.log("0b0011".slice(2));
console.log(parseInt("0011", false ? 2 : 8))

console.log("0o0011".slice(2));
console.log(parseInt("0011", true ? 2 : 8))
console.log()


let reTrim = /^\s+|\s+$/g,

    reIsBinary = /^0b[01]+$/i,
    reIsOctal = /^0o[0-7]+$/i,
    reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

function toNumber(value) {
    if (typeof value == 'number') {
        return value;
    }

    if (typeof value != 'string') {

        return value === 0 ? value : +value;
    }
    value = value.replace(reTrim, '');
    let isBinary = reIsBinary.test(value);
    return (isBinary || reIsOctal.test(value))
        ? parseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
}


console.log( toNumber("     0b0011 "))

code


Range

range(0b011"10"1)

[ 3, 4, 5, 6, 7, 8, 9 ]


range("  0b011 ""     000005""NON")
[ 3, 3 ]

range("  0b011 ""     000005"" 0o1")
[ 3, 4 ]

code

RegEXP : en action escape

Considérer le code suivant, permettant d'échapper le code HTML (le texte saisie ne doit pas être interprété en HTML).

let p = '<h1>escapeForHTML<h1>';

let regex = /[<&]/gi;

let r = {
  '>' : '&gt;',
  '&' : '&amp;',
  '<' : '&lt;',
}

let f = function(c){
  return r[c];
}

Comparer le résultat des deux écritures :

document.body.insertAdjacentHTML("afterbegin",p);
document.body.insertAdjacentHTML("afterbegin",p.replace(regex,f));

Version compacte !

const escapeForHTML = s => s.replace(/[&<]/g, c => c === '&' ? '&amp;' : '&lt;');

document.body.insertAdjacentHTML("afterbegin",escapeForHTML("<h1> escapeForHTML </h1>"));
document.body.insertAdjacentHTML("afterbegin","<h1> escapeForHTML </h1>");

Version avec Map 

let p = '<h1>escapeForHTML<h1>';

let regex = /[<>&]/gi;

let r = new Map([
  ['>','&gt;'],
  ['&','&amp;'],
  ['<', '&lt;'],
]);

let f = c => r.get(c)

document.body.insertAdjacentHTML("afterbegin",p);

document.body.insertAdjacentHTML("afterbegin",p.replace(regex,f));