2017-10-12 4 views
0

i besoin d'aide ici en ce qui concerne replace ou peut-être rereplaceremplacer les polices avec rereplace ou remplacer

je suis en train de remplacer le font-family:anything à font-family:swiss7

mais s'il y a une valeur font-family: BebasNeue; Je veux que la police intacte et ne pas ajouter la taille de la police, mais bien la taille de la police aux autres polices

Je suivais ce tutoriel, mais en quelque sorte son ne correspond pas à à ce que je dois réaliser

https://www.sitekickr.com/snippets/coldfusion/strip-css-styles

+0

Qu'avez-vous essayé jusqu'à présent? Quel genre de résultat avez-vous obtenu? Quelle version de ColdFusion êtes-vous? Pouvez-vous mettre le CSS dans un fichier séparé? Etc –

Répondre

0

Mise à jour: Eh bien, je pensais que la question était plus simple. Si vous voulez voir ma réponse originale, il suffit de voir l'historique des modifications pour ce post. Cette réponse utilise un principe similaire mais où vous recherchez un élément que vous ne voulez pas supprimé et ensuite le repousser avec le remplacer.

<cfset teststr1 = "font-family: BebasNeue;" /> 
<cfset teststr2 = "font-family: Verdana" /> 
<cfset teststr3 = "font-family: BebasNeue; font-family: Times New Roman; color: red" /> 

<cfset search1 = "(font-family:\s*)((BebasNeue)|[\w ]+)(;)?" /> 
<cfset replace1 = "font-family: \3swiss7\4" /> 

<cfset search2 = "BebasNeueswiss7" /> 
<cfset replace2 = "BebasNeue" /> 

<cfoutput> 
    <ol> 
    <li>#replaceNoCase(reReplaceNoCase(teststr1, search1, replace1, "all"), search2, replace2, "all")#</li> 
    <li>#replaceNoCase(reReplaceNoCase(teststr2, search1, replace1, "all"), search2, replace2, "all")#</li> 
    <li>#replaceNoCase(reReplaceNoCase(teststr3, search1, replace1, "all"), search2, replace2, "all")#</li> 
    </ol> 
</cfoutput> 

Résultat:

1. font-family: BebasNeue; 
2. font-family: swiss7 
3. font-family: BebasNeue; font-family: swiss7; color: red 

vous donc essentiellement remplacer toutes les familles de polices avec le type de police choisi, dans ce swiss7 cas, mais en incluant le sélecteur de groupe dans le laissez-vous remplacer la police BebasNeue dans la chaîne. Une étape supplémentaire nettoie ensuite le nom de police combiné laissé derrière.

+0

vient de réaliser que j'ai mal lu la question. Ajuster la réponse maintenant –

+0

a mis à jour la réponse pour réellement répondre à la question –

+0

semble résoudre le problème, mais il ne prend pas en considération si j'ai besoin d'ajouter des styles supplémentaires seulement à ce style de police où swiss7 est utilisé, envisager d'utiliser la police -size, font-weight – Avin

-1

Je suggère une approche plus maintenable: if !findNoCase(styleString, 'BebasNeue'){ styleString = REReplace(style, 'font-family:[^"|^;]*', "font-family:swiss7; font-size:12", "ALL"); }

Cela devrait vous permettre de vous voulez après: le laisser seul si elle est BebasNeue, othe rwise, remplacez la police-famille par swiss7 et ajoutez une taille de police. Mais ce n'est pas si compliqué qu'un regex-newbie ne puisse pas comprendre ce qui se passe.

+0

Downvoted parce que cela ne prend pas en compte un mélange de multiples «font-family». L'approche minimale serait une capture et un remplacement de groupe regex dans chaque groupe capturé après vérification de la valeur de la famille de polices. – Alex

+0

@Alex Je comprends ce que vous dites, mais la requête littérale était "font-family: n'importe quoi à font-family: swiss7" à moins que "font-family: BebasNeue;". Le ";" dans le cas d'exception, BebasNeue doit être indiqué comme seule police. Une liste de plusieurs polices sera remplacée par "swiss7" en utilisant ma suggestion. –

+0

Il remplace le contenu d'un fichier css/html entier. Vérifiez le lien qu'il a mentionné. Un simple remplacement/reReplace n'est pas suffisant ici, car il a besoin d'un [regex matcher] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html). – Alex