0
votes

Remplacement de la valeur avec regex

Regex est l'une de ces choses que je ne peux jamais comprendre. J'ai essayé d'utiliser des outils de regex mais je ne pouvais pas le faire. Quelqu'un peut-il m'aider, s'il vous plaît? J'utilise jQuery

si j'ai une propriété SMS-Shadow CSS de xxx

et j'ai un rapport d'échelle de 0,5

Comment Je reçois chacune des valeurs de position, multipliez-la par rapport de 0,5 et renvoie une nouvelle chaîne de xxx

alors est-il possible de le faire pour text-ombres avec plusieurs ombres avec plusieurs valeurs? Comme xxx

Je suppose que vous pouvez le diviser, puis effectuer le remplacement de chaque valeur?

Toute aide est très appréciée.

Merci


1 commentaires

Pouvez-vous nous montrer du code que vous avez essayé?


3 Réponses :


0
votes

Vous pouvez extraire les valeurs PX et multiplier par 0,5 chaque numéro à la manière suivante:

p>

let str = 'rgba(0,0,0,0.1) 15px 12px 5px, rgba(0,0,0,0.1) 25px 30px 6px, rgba(0,0,0,0.1) 5px 15px 25px';

let splited = str.split(', ');
console.log(splited);

let arr = splited.map(x => x.match(/\d+(?=px)/g).map(y => parseInt(y * 0.5))).flat(1);
console.log(arr);

let result = [];

for(i=0; i<arr.length; i+=3){
    result.push('rgba(0,0,0,0.1) ');
    result.push(arr[i] + 'px ' + arr[i+1] + 'px ' + arr[i+2] + 'px, ');
    }

console.log(result);
console.log(result.join(''))


0 commentaires

1
votes

Utilisez Regex pour obtenir les valeurs px code>, puis utilisez Remplacer pour multiplier les valeurs correspondantes

p>

str = "rgba(0,0,0,0.1) 10px 20px 5px"
newstr = str.replace(/(-?\d+\.?\d?)(?=px)/g,o => o*0.5)
console.log(newstr)


5 commentaires

Merci. Ceci est exactement ce que je cherchais. Un petit changement serait d'annoncer "px" aux valeurs remplacées newstr = str.replace (/ \ d + (?: px) / g, o => parseint (o) * 0.5 + "px")


Suggestion: Utilisez des recherches sur les regards, remplacer (/ \ d + (? = Px) / g, o => parseint (o) * 0.5)


Je suis désolé, il suffit de courir dans des problèmes de valeurs négatives et décimales. str = "rgba (0,0,0,0,1) -9.6px 20px 5px" ne fonctionnera pas. J'ai essayé de modifier la regex mais je n'ai pas de chance. J'ai essayé / -? [0-9] \ d * (\ \ d +) (?: px) / qui correspond à -9.6px mais pas les autres mais pas les autres. J'ai également remplacé Parseint avec Paysfloat pour obtenir des numéros plus précis


@Tuannguyen essaie remplacer (/ \ d + (?: \. \ D +)? (? = Px) / g, o => parsefloat (O) * 0.5)


Merci Sundeep mais cela n'a pas fonctionné. J'ai trouvé celui-ci à travailler cependant. remplacer (/ \ -? (\ d + \.? \ d * | \ d * \ \. \ d +) (?: px) / g >



1
votes

En supposant que le positionnement des propriétés de Text-Shadow est dans l'ordre 'Color H-Shadow V-Shadow Blur-Radius' Code>. La fonction suivante doit résoudre le but.

p>

function generateScaledValues(x, scale){
    //Assuming the input string is equally separated by ", "
    let result = x.split(", ").map(e=>{
                    let arr = e.split(" ")
                    //.match(/\d+/g) is used to find the number from the string 
                    // example it will return an array ['20'] for '20px'
                    // furthur we need to convert it into number using Number()
                    // which is then multiplied with the scaling factor
                    let hShadow = Number(arr[1].match(/\d+/g)[0])*scale 
                    let vShadow =Number(arr[2].match(/\d+/g)[0])*scale 
                    let blurRadius = Number(arr[3].match(/\d+/g)[0])*scale 
                    return `${arr[0]} ${hShadow}px ${vShadow}px ${blurRadius}px`
                 })
    return result
}

let textShadowProps = "rgba(0,0,0,0.1) 15px 12px 5px, rgba(0,0,0,0.1) 25px 30px 6px, rgba(0,0,0,0.1) 5px 15px 25px"

// The result will be an array of strings for multiple values which we join using the below code
console.log(generateScaledValues(textShadowProps, 0.5).join(", "))


0 commentaires