Toon posts:

[JS] Het grote samTho's RegExp-vragen topic

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben maar begonnen met nummers als titel op te geven aangezien ik al vele vragen heb gesteld.. :)

Ok. Mijn vraag: hoe kan ik een bestaande value vervangen door een andere value?

Ik heb zelf het onderstaande bedacht, maar dat werkte weer eens niet.

JavaScript:
1
2
3
4
5
var sCellContent = '<input type="hidden" value="1" name="hidContestPositionIDs[iKey]">';

var sResult = sCellContent.replace(/(?=value=".+?"|)(.+?name="hidContestPositionIDs\\[iKey\]".+?)(?=value=".+?"|)/i, '$1 value="test"');

alert(sResult);

Verwijderd

Dat is gewoon een kwestie van de juiste RegEx in elkaar knutselen...

Dit gebruik ik om de HTML van Word enigsinds op te schonen
JavaScript:
1
2
3
4
5
6
  c = c.replace(/<([\w]+) class=([^ |>]*)([^>]*)/gi, "<$1$3");
  c = c.replace(/<([\w]+) style="([^"]*)"([^>]*)/gi, "<$1$3");
  c = c.replace(/<\\?\??xml[^>]>/gi, "");
  c = c.replace(/<\/?\w+:[^>]*>/gi, "");
  c = c.replace(/<p([^>])*>(&nbsp;)*\s*<\/p>/gi,"");
  c = c.replace(/<span([^>])*>(&nbsp;)*\s*<\/span>/gi,"");

[ Voor 76% gewijzigd door Verwijderd op 10-06-2004 23:27 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:44

crisp

Devver

Pixelated

ik heb de titel enigszins aangepast zodat je geen nieuwe topics meer hoeft te maken voor je verdere RegExp vragen ;)

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op 10 juni 2004 @ 23:26:
ik heb de titel enigszins aangepast zodat je geen nieuwe topics meer hoeft te maken voor je verdere RegExp vragen ;)
Perfect! ;)

Edit:

Maar hoe kan ik er nu voor zorgen dat die '(?=value=".+?"|)' niet bij de $1 wordt opgeteld? Die haakjes kan ik immers moeilijk weglaten. :/

[ Voor 27% gewijzigd door Verwijderd op 10-06-2004 23:37 ]


Verwijderd

Is dit wat je zoekt?

code:
1
2
var sCellContent = '<input type="hidden" value="1" name="hidContestPositionIDs[iKey]">';
alert(sCellContent.replace(/value=([^ >])+/gi, 'value=\'blaat\''));


Waardes van attributen kan je trouwens ook met DOM functies veranderen

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:44

crisp

Devver

Pixelated

kijk eens naar:
(?:x)

Matches 'x' but does not remember the match. These are called non-capturing parentheses. The matched substring can not be recalled from the resulting array's elements [1], ..., [n] or from the predefined RegExp object's properties $1, ..., $9.
Die | heeft trouwens weinig betekenis in je construct, ik denk dat je een ? quantifier nodig hebt.

Intentionally left blank


Verwijderd

Topicstarter
Verwijderd schreef op 10 juni 2004 @ 23:35:
Is dit wat je zoekt?

code:
1
2
var sCellContent = '<input type="hidden" value="1" name="hidContestPositionIDs[iKey]">';
alert(sCellContent.replace(/value=([^ >])+/gi, 'value=\'blaat\''));


Waardes van attributen kan je trouwens ook met DOM functies veranderen
1. Ongeveer, want ik moet wel perse op die name matchen om er zo zeker van te zijn dat de value van het juiste element wordt aangepast.

2. Het moet perse hard coded gebeuren.

Verwijderd

Topicstarter
crisp schreef op 10 juni 2004 @ 23:41:
kijk eens naar:


[...]


Die | heeft trouwens weinig betekenis in je construct, ik denk dat je een ? quantifier nodig hebt.
Die '|' gebruik ik om te matchen op een e.v.t. value, aangezien deze zowel voor het name-attribuut kan staan als er achter.

Is dit: '(?:)' trouwens gelijk aan dit '(?=)' (afgzien dat de eerste geen match onthoudt)?

Verwijderd

Topicstarter
Ok. Eindelijk de oplossing gevonden. Ik heb het toch maar in twee stappen gedaan, want in 1 keer lukte niet.

Oja, ik heb dat boek binnen, dus misschien ben ik binnenkort wel RegExp-expert. ;)

JavaScript:
1
2
3
4
5
6
var sCellContent = '<input type="text" value="1" name="txtContestPositionIDs[iKey]" class=".hihihi"><textarea class=".woei" name="blaat" tralalaa value="1">';

var sResult = sCellContent.replace(/(<input\stype=".+?"|textarea|select)(.*?)value=".+?"(.*?>)/ig, '$1 $2 value="nieuw"$3');
var sResult = sResult.replace(/(<input\stype=".+?"|textarea|select)(.*?)name=".+?"(.*?>)/ig, '$1 $2 name="nieuw"$3');

alert(sResult);

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:44

crisp

Devver

Pixelated

ik zou gewoon doen wat ik in een eerder topic heb voorgesteld: eerst op basis van tags selecteren, en dan de inhoud van de tag gaan analyseren. Je moet niet alles in 1 RegExp willen gooien, dat maakt het minder flexibel, slecht onderhoudbaar en traag.

Misschien kan je wat inspiratie opdoen adhv mijn HTML tidier

Intentionally left blank


Verwijderd

Topicstarter
Nee het werkt dus ik houd het zo. Maar bedankt voor de tips.
Pagina: 1