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 p> et j'ai un rapport d'échelle de 0,5 p> Comment Je reçois chacune des valeurs de position, multipliez-la par rapport de 0,5 et renvoie une nouvelle chaîne de p> alors est-il possible de le faire pour text-ombres avec plusieurs ombres avec plusieurs valeurs? Comme p> Je suppose que vous pouvez le diviser, puis effectuer le remplacement de chaque valeur? P> Toute aide est très appréciée. P> Merci p> p>
3 Réponses :
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('')) Utilisez Regex pour obtenir les valeurs p> px code>, puis utilisez Remplacer pour multiplier les valeurs correspondantes str = "rgba(0,0,0,0.1) 10px 20px 5px"
newstr = str.replace(/(-?\d+\.?\d?)(?=px)/g,o => o*0.5)
console.log(newstr)
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") Code>
Suggestion: Utilisez des recherches sur les regards, remplacer (/ \ d + (? = Px) / g, o => parseint (o) * 0.5) code>
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" code> 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) / code> 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) code>
Merci Sundeep mais cela n'a pas fonctionné. J'ai trouvé celui-ci à travailler cependant. remplacer (/ \ -? (\ d + \.? \ d * | \ d * \ \. \ d +) (?: px) / g >
En supposant que le positionnement des propriétés de Text-Shadow est dans l'ordre p> 'Color H-Shadow V-Shadow Blur-Radius' Code>. La fonction suivante doit résoudre le but. 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(", "))
Pouvez-vous nous montrer du code que vous avez essayé?