PDA

View Full Version : How to replace &word= with | within a function?


HopeSprings
07-14-2002, 10:18 PM
I'd like to replace a series of words from a URL string (i.e. &price=) into a non-alpha character such as the vertical bar. I don't know enough about regExp to write the code without getting "invalid character in regExp"

Can anyone help? I have four words to replace.

Thanks in advance.

poccil
07-14-2002, 11:20 PM
A regular expression is usually the first parameter in the replace method. The following regular expression will help:

/\&(\w*)\=/g

HopeSprings
07-15-2002, 02:34 AM
Dave,

Thank you for your response. I'd like to be more selective on the change -- only four particular &strings=, not all of them. I'm trying to concat a product into: code=stamp|price|qty|cost within a function so they can be put into keyPairs and processed as one set, a la sendmail's routine.

Here's a sample of the string:
html?code=AD108&stamp=ArtDecoFan&price=6.25&qty=1&cost=6.25

I imagine the logical thing would be to do this from within HTML before SUBMIT'g, but I can't for the life of me figure out how to recapture and use the qty and cost field after it is called upon to calculate price*qty

jkd
07-15-2002, 03:07 AM
var values = location.search.replace(/[&\?][^=]+=([^&]+)/g, '$1,').split(',');
values.pop();

var code = values[0] + '=' + values.slice(1).join('|');

That puts the example string you gave into:

AD108=ArtDecoFan|6.25|1|6.25

That what you wanted? :)

HopeSprings
07-15-2002, 03:33 AM
Dave:

Method of building the query/search string is FORM GET

jkd:

Yes, that is the result I want. I am not however, sure whether the code you supplied will do all occurences of &word=, or only the four that I want. I'm having trouble interpreting the code you supplied :( I have 60+ occurrences of this string being passed, and other BillTo/ShipTo info tagged on the end. I'd like to keep the function as generic as possible to use elsewhere, so is it possible to just replace specific words?

Thank you both for your time in responding.

jkd
07-15-2002, 04:49 AM
My code will remember all values after an equal sign, then use the first one as the equal one, then join the other's with "|".

It should work with any number of appended values.

HopeSprings
07-15-2002, 05:14 AM
I'm trying to perform the transformation on the receiving page, but because I don't have a unique name for each value, I get 60+ strings of code=, followed by 60+ strings of stamp= and 60 price=, and so on -- but not together, nor related to each other. I'm trying to concat them so I end up with a unique name for each item ordered. Here's the string:

html?code=AD-108&stamp=ArtDecoFan&price=6.25&qty=1&cost=6.25&code=AD-109&stamp=ArtDecoLilly&price=7.00&qty=2&cost=14.00

but there are 60+ of them, plus BillTo and ShipTo info appended on the end of this string, which is ok as is, so I don't want those &word='s to be changed to |.

So what jkd's code does is give me a unique identifier: AD108=ArtDecoFan|6.25|1|6.25 -- which is what I want.

Maybe there's a better way, but it's gone missin' on me.

HopeSprings
07-15-2002, 01:52 PM
Dave, again thanks for all your help and responding, but I don't think I have a solution.

jkd's example results is what I want to produce for some 60 or more strings. But if I understand his code correctly, it's going to process all occurrences of &word= into that format. I need a way to just replace four identical words each time it occurs in the whole string. So

&stamp= changes to |
&price= changes to |
&qty= changes to |
&cost= changes to |

So this string, and all like it: &code=AD-108&stamp=ArtDecoFan&price=6.25&qty=1&cost=6.25

become this string: AD108=ArtDecoFan|6.25|1|6.25

but leaves: &Billto=joejones&Shipto=joanjones

etc.

Sorry this is so confusing.

jkd
07-15-2002, 05:50 PM
In that case, I think you'd want something like:

var results = location.search.replace(/\?code=([^&]+)&stamp=([^&]+)&price=([^&]+)&qty=([^&]+)&cost=([^&]+)(.*)$/, '$1=$2|$3|$4|$5$6');

:)

HopeSprings
07-24-2002, 08:20 PM
jkd + Dave

Thank you both for your time in responding; now I'll just have to figure out how to incorporate it into my function routine.

I appreciate your being here for us all to learn.