Ahah! I forgot that the RegExp escape character (i.e., backslash) is
also the AS3 String escape character and therefore requires double
escaping! That's really annoying, isn't it?
That's a good reason to use RegExp literal notation rather than a
pattern String passed to the constructor:
/abc/igm <=> new RegExp("abc", "igm")
/\[abc\]/ <=> new RegExp("\\[abc\\]", "igm")
I didn't actually check that the second one is equivalent, but I'm
pretty sure it is.
Gordon Smith
Adobe Flex SDK Team
________________________________
From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Derrick Anderson
Sent: Wednesday, April 16, 2008 11:48 AM
To: [email protected]
Subject: Re: [flexcoders] RegExp searching for [ and ], are they
reserved? SOLVED
i think i figured it out, the [ and ] characters have to be
double-escaped like so
new RegExp("\\[[^]*\\]","igm");
d.
On Wed, Apr 16, 2008 at 2:17 PM, Derrick Anderson
<[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> > wrote:
just bumping this one up there, it is critical for my app to do this and
I see no way past it. anybody ever needed to find content with regex
that contained [] characters?
thanks,
d.
On Wed, Apr 16, 2008 at 10:01 AM, Derrick Anderson
<[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> > wrote:
hey i'm not a regex pro by far which is why i asked if my regex was
wrong- but taking your suggestion it still does not work- not sure why.
i've used the RegExr air app to test this and the simplest i can get it
is new RegExp("\[[^]*\]","igm");
this works when {} are used but not when [] is used, you can see in the
example below- it looks like escaping the [] is affecting the match
(although it works fine in the regex test tool).
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> " layout="absolute">
<mx:Script>
<![CDATA[
private var mergeRE:RegExp = new RegExp("\[[^]*\]","igm");
private var mergeRE2:RegExp = new RegExp("{[^]*}","igm");
public function runSquareBracketTest():void
{
var response:Array = subjectString.text.match(mergeRE);
resultString.text = response.toString();
}
public function runCurlyBracketTest():void
{
var response:Array =
subjectString.text.match(mergeRE2);
resultString.text = response.toString();
}
]]>
</mx:Script>
<mx:VBox>
<mx:TextArea id="subjectString" width="400" height="200">
<mx:text>
<![CDATA[<strong>[Employee First Name] </strong>
<strong>{Employee Last Name} </strong>]]>
</mx:text>
</mx:TextArea>
<mx:TextArea id="resultString" width="400" height="200" />
<mx:Button click="runSquareBracketTest();" label="Get first
name." />
<mx:Button click="runCurlyBracketTest();" label="Get last name."
/>
</mx:VBox>
</mx:Application>
On Tue, Apr 15, 2008 at 4:33 PM, Gordon Smith <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> > wrote:
I'm confused... why isn't your pattern something like "\[.*]\]" ? What's
going on with the ^ and the > ? What is supposed to match against
letters like E, m, p, l, etc.?
Gordon Smith
Adobe Flex SDK Team
________________________________
From: [email protected] <mailto:[email protected]>
[mailto:[email protected] <mailto:[email protected]> ]
On Behalf Of Derrick Anderson
Sent: Tuesday, April 15, 2008 1:23 PM
To: [email protected] <mailto:[email protected]>
Subject: Re: [flexcoders] RegExp searching for [ and ], are they
reserved?
i had tried escaping them, below i've pasted an example of my problem- 2
samples: 1 looking for [Employee First Name] and one looking for
{Employee First Name} (curly braces vs square braces) and even though
the brackets are escaped, the regex with [ and ] only return the ending
]. do i have the regex wrong?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> " layout="absolute">
<mx:Script>
<![CDATA[
private var mergeRE:RegExp = new RegExp("\[[^>]*?\]","igm");
private var mergeRE2:RegExp = new RegExp("{[^>]*?}","igm");
public function runSquareBracketTest():void
{
var response:Array = subjectString.text.match(mergeRE);
resultString.text = response.toString();
}
public function runCurlyBracketTest():void
{
var response:Array =
subjectString.text.match(mergeRE2);
resultString.text = response.toString();
}
]]>
</mx:Script>
<mx:VBox>
<mx:TextArea id="subjectString" width="400" height="200">
<mx:text>
<![CDATA[<strong>[Employee First Name] </strong>
<strong>{Employee Last Name} </strong>]]>
</mx:text>
</mx:TextArea>
<mx:TextArea id="resultString" width="400" height="200" />
<mx:Button click="runSquareBracketTest();" label="Get first
name." />
<mx:Button click="runCurlyBracketTest();" label="Get last name."
/>
</mx:VBox>
</mx:Application>
On Tue, Apr 15, 2008 at 4:08 PM, Gordon Smith <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> > wrote:
[ and ] are metacharacters in RegExp patterns. For example, "[abc]"
matches either "a", or 'b" or "c". To prevent this interpretation,
escape them with a backslash.
Gordon Smith
Adobe Flex SDK Team
________________________________
From: [email protected] <mailto:[email protected]>
[mailto:[email protected] <mailto:[email protected]> ]
On Behalf Of Derrick Anderson
Sent: Tuesday, April 15, 2008 12:49 PM
To: [email protected] <mailto:[email protected]>
Subject: [flexcoders] RegExp searching for [ and ], are they reserved?
hey all,
i'm trying to do a replace on a string and replace anything in brackets
with something else.
so [this] word would get replaced, however in the regex tester at
gskinner this works fine (it's flex based regex test tool) but in my
local code- i always get unexpected results when my regex expression has
brackets in it.
private var mergeRE:RegExp = new RegExp("\[[^>]*?]","igm");
is there another escape character i need to use, why does flash have a
problem searching for [ and ] in regex?
thanks,
d.