Regular Expression Question

G

Gopinath

Hi JavaScript Gurus,

I've a question on Regular Expressions using RegExp object. I just
want to know whether it is possible to do the search (see below) using
RegExp. Any pointers would be of immense help. Thanks.

My simple JavaScript code (inside a function):

=======================
var strList = "~@!~1#Apple~@!~2#Orange~@!~3#Mango~@!~4#Grapes~@!~";
var strSearchStr = "~@!~3#(.[^~@!~]*)";
var objRegExp = new RegExp(strSearchStr, "gi");
var arrRegExp = objRegExp.exec(strStateList);
if (arrRegExp != null) {
document.write("<br>" + RegExp.$1);
}
delete(objRegExp);
return (true);
=======================

When I supply 3, I want to get the corresponding value that is Mango.
With the regular expression, I get the result I'm aiming for.

BUT...

if the list was changed to this:

var strList = "~@!~1#Apple~@!~2#Orange~@!~3#@!Mango~@!~4#Grapes~@!~";

basically Mango has been changed to @!Mango. I've added two characters
@ and ! which are the row delimiters on the list string.

Then my regular expression search fails. The pattern I'm using [^~@!~]
searches and excludes individual characters ~, @ and !. But I want it
to exclude the grouping (~@!~).

I've tried the following reg exp. searches with no luck:

~@!~3#(.[^(~@!~)]*)
~@!~3#(.[^(~@!~){0,1}]*)

Any idea as what I'm doing wrong. I know this should be pretty simple
to implement.

Thanks,
Gopi
 
T

Thomas 'PointedEars' Lahn

Gopinath said:
[...]
var strList = "~@!~1#Apple~@!~2#Orange~@!~3#Mango~@!~4#Grapes~@!~"; ^^^^^^^
var strSearchStr = "~@!~3#(.[^~@!~]*)";
var objRegExp = new RegExp(strSearchStr, "gi");
var arrRegExp = objRegExp.exec(strStateList);
^^^^^^^^^^^^
What is `strStateList'?
if (arrRegExp != null) {

if (arrRegExp)

suffices.
document.write("<br>" + RegExp.$1);

You should not use RegExp.$* anymore, those properties are deprecated.
RegExp.prototype.exec() returns the extended Array object you are looking
for -- use arrRegExp[1].
}
delete(objRegExp);

`delete' is not a method, it is a special operator. You would have removed
the parantheses and include whitespace between operator and operand if
the `delete' operation would have made sense: You can only apply `delete'
successfully on variables that have *not* been declared with `var' or on
object properties. But since `objRegExp' is declared local and does not
exist outside of the execution context, it is not required to free the
allocated memory explicitely.
return (true);

`return' is not a method, it is a something between statement and operator.
It is not necessary to use parantheses here.
=======================

When I supply 3, I want to get the corresponding value that is Mango.
With the regular expression, I get the result I'm aiming for.

Which is surprising to me.
BUT...

if the list was changed to this:

var strList = "~@!~1#Apple~@!~2#Orange~@!~3#@!Mango~@!~4#Grapes~@!~";

basically Mango has been changed to @!Mango. I've added two characters
@ and ! which are the row delimiters on the list string.

Then my regular expression search fails. The pattern I'm using [^~@!~]
searches and excludes individual characters ~, @ and !.

Which is why the second "~" can be removed.
But I want it to exclude the grouping (~@!~).

I've tried the following reg exp. searches with no luck:

~@!~3#(.[^(~@!~)]*)
~@!~3#(.[^(~@!~){0,1}]*)

Within a character class, with the exception of "^" at the beginning
and "-" between other characters, characters have no special meaning,
so the above character classes will only additionally match "(", "~",
")" and "{", "0", ",", "1", and "}".
Any idea as what I'm doing wrong.

You have not read the manual.

<http://devedge.netscape.com/library/manuals/2000/javascript/1.5/guide/>
<http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/>
I know this should be pretty simple to implement.

var strSearchStr = "~@!~3#(.(?!^~@!~)*)";

But if you *know* which RegExp to use, you should not use the RegExp()
constructor, but RegExp object literals:

var
strList = "~@!~1#Apple~@!~2#Orange~@!~3#Mango~@!~4#Grapes~@!~",
arrRegExp = /~@!~3#(.(?!~@!~)*)/gi.exec(strList);
...


HTH

PointedEars
 
A

Alien Visitor

Hi PointedEars,

Thanks for the suggestions and pointers. They were helpful. And I've
found out the right regular expression for my problem.

Thanks,
Gopi
 
T

Thomas 'PointedEars' Lahn

Alien said:
Thanks for the suggestions and pointers. They were helpful.

You're welcome.
And I've found out the right regular expression for my problem.

Care to give something back to the community?


PointedEars

P.S.: Changing names on Usenet is undesired behavior.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top