bluelabel
bluelabel

Reputation: 2104

How to extract specific parts of a URL and replace with different data

I have a specific type url and i need to identify some parts of it and replace with some data, url would be www.something.com@param1={{^User Name^}},param2={{^user id^}},....

What i need to do is, identify {{^User Name^}} and {{^user id^}} and replace with my values,

Anybody have an idea to do this with flex?

A friend of mine told me to use RegExp for this, but I'm clueless about how to use it.

Upvotes: 0

Views: 1077

Answers (3)

eldamar
eldamar

Reputation: 659

Something like this might work, no expert on RegExp tho.

var s:String = "www.something.com@param1={{^User Name^}},param2={{^user id^}}";
var userPattern:RegExp = /(?<=param1=)({{\^)([A-Za-z0-9 ])*(\^}})/;
var userIdPattern:RegExp = /(?<=param2=)({{\^)([A-Za-z0-9 ])*(\^}})/;
s = s.replace(userPattern,'username');
s = s.replace(userIdPattern,'user_id');

If you want to replace only the string inside {{}} maby this would work:

var s:String = "www.something.com@param1={{^User Name^}},param2={{^user id^}}";
var userPattern:RegExp = /(?<=param1={{)\^([A-Za-z0-9 ])*\^(?=}})/;
var userIdPattern:RegExp = /(?<=param2={{)\^([A-Za-z0-9 ])*\^(?=}})/;
s = s.replace(userPattern,'username');
s = s.replace(userIdPattern,'user_id');

To remove multiple {{}} for exampe www.something.com@param1={{^User Name^}},{{^,e,^}},param2={{^user id^}} between paramX try this:

var s:String = "www.something.com@param1={{^User Name^}},{{^,e,^}},param2={{^user id^}}";
var userPattern:RegExp = /(?<=param1={{)\^([A-Za-z0-9\^}}{{, ])*(?=}})/;
var userIdPattern:RegExp = /(?<=param2={{)\^([A-Za-z0-9\^}}{{, ])*(?=}})/;
s = s.replace(userPattern,'username');
s = s.replace(userIdPattern,'user_id');

Output should be www.something.com@param1={{username}},param2={{user_id}}.

Another example:

var s:String = "www.something.com@param1={{^User Name^}},{{^,e,^}},param2={{^user id^}}";
var userPattern:RegExp = /(?<=param1=)({{\^)([A-Za-z0-9\^}}{{, ])*(})/;
var userIdPattern:RegExp = /(?<=param2=)({{\^)([A-Za-z0-9\^}}{{, ])*(})/;
s = s.replace(userPattern,'username');
s = s.replace(userIdPattern,'user_id');

Output should be www.something.com@param1=username,param2=user_id.

Upvotes: 1

Davz
Davz

Reputation: 1530

Maybe not the most efficient or nice solution but it will get the work done. Simply update the replace() function to manage different types of parameters.

public static const START_TAG:String = "{{^";
public static const END_TAG:String = "^}}";

public function replace():void {
    var url:String = "param1={{^User Name^}},param2={{^user id^}}";

    while ( getTagStartIndex(url) >= 0 ) {
      var currentTag:String = getTagContent(url);
      var value:String = "";
      if ( currentTag == "User Name" ) {
        value = "myName";
      } else if ( currentTag == "user id" ) {
        value = "myID";
      } else {
        value = "undefinedtag";
      }
      url = replaceTagWithValue(currentTag,value, url);
     }

    }

protected function getTagStartIndex(str:String):int {
    return str.indexOf(START_TAG);
}

protected function getTagEndIndex(str:String):int {
    return str.indexOf(END_TAG, getTagStartIndex(str+1));
}

protected function getTagContent(str:String):String {
    return str.substring(getTagStartIndex(str)+START_TAG.length, getTagEndIndex(str));
}

protected function replaceTagWithValue(tag:String, tagValue:String, str:String):String {
    return str.replace(START_TAG+tag+END_TAG,tagValue);
}

Upvotes: 0

moropus
moropus

Reputation: 3782

Try

\{\{\^.*\^\}\}

Useful tool for this: http://www.gskinner.com/RegExr/

Upvotes: 0

Related Questions