I just took a closer look at the ASDoc [1] and Mozilla doc [2].

Both imply that they take more than one type of input, so any utility
function probably should as well and thus be of type "*".
One difference in the two docs that stands out to me is in [1] where it
says:

"If the pattern is not a regular expression or a string, then the method
converts it to a string before executing."

But [2] says:

"If a non-RegExp object obj is passed, it is implicitly converted to a
RegExp by using new RegExp(obj)"


So, assuming this is true, then yes, we need a utility function to wrap
and hide the differences.  I would think we want to be backward compatible
with AS in order to ease migration effort, so I think it would look
something like:

public function match(input:String, pattern:*):Array
{
  COMPILE::SWF
  {
    return input.match(pattern);
  }
  COMPILE::JS
  {
    if (pattern is RegExp)
      return input.match(pattern);
    else
    {
      pattern = pattern.toString();
      if (input.indexOf(pattern) != -1)
        return [ pattern ];
      return null;
    }
  }
}

Of course, I could be wrong...

-Alex

[1] 
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.h
tml#match()
[2] 
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Ob
jects/String/match

On 7/20/17, 9:58 AM, "Harbs" <harbs.li...@gmail.com> wrote:

>Really simply:
>new RegExp(“?”)
>
>In Flash, that will produce a RegExp object which matches nothing.
>
>In JS, it throws an error that the RegExp is not valid.
>
>match and search seem to call the RegExp constructor under the hood. In
>Flash it succeeds. In JS it throws an error.
>
>Utility functions serve two purposes:
>
>1. It prevents the error from being thrown.
>2. It warns the developer to not pass in a string as it’s converted to a
>RegExp anyway and is less predictable.
>
>An alternate (possibly better) way to handle this would be to have the
>compiler issue a warning.
>
>> On Jul 20, 2017, at 7:05 PM, Alex Harui <aha...@adobe.com.INVALID>
>>wrote:
>> 
>> I think I'm lost.  If both behave the same, then why do we need to call
>> some utility function?
>> 
>> -Alex
>> 
>> On 7/20/17, 5:00 AM, "Yishay Weiss" <yishayj...@hotmail.com> wrote:
>> 
>>> Good catch. I was misled by the docs [1].
>>> 
>>> [1] 
>>> 
>>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.ado
>>>be
>>> 
>>>.com%2Fen_US%2FFlashPlatform%2Freference%2Factionscript%2F3%2FString.htm
>>>l%
>>> 
>>>23match&data=02%7C01%7C%7C66b63f8228ab4f80a39408d4cf66f9a9%7Cfa7b1b5a7b3
>>>44
>>> 
>>>38794aed2c178decee1%7C0%7C0%7C636361488561328745&sdata=CbWB8sk4vOv1vId9a
>>>T7
>>> WkDjQrkqarHU2aAAoWw9UBNA%3D&reserved=0()
>>> 
>>> From: Harbs<mailto:harbs.li...@gmail.com>
>>> Sent: Thursday, July 20, 2017 9:40 AM
>>> To: dev@flex.apache.org<mailto:dev@flex.apache.org>
>>> Subject: Re: [FlexJS] String.match()
>>> 
>>> Both Flash and JS engines automatically convert to RegExp. I had not
>>> realized that at first.
>>> 
>>> It seems that the only difference between the Flash engine and JS
>>>engines
>>> is what happens when constructing a RegExp object from invalid input.
>>> Flash matches nothing, while JS throws an error.
>>> 
>>> By just wrapping the call in a try/catch, that seems to resolve the
>>>issue.
>>> 
>>> I added the trace because I think it’s bad practice to use strings
>>> instead of RegExp because it can lead to unexpected results and a new
>>> RegExp instance needs to be constructed every time.
>>> 
>>>> On Jul 20, 2017, at 3:32 AM, Alex Harui <aha...@adobe.com.INVALID>
>>>> wrote:
>>>> 
>>>> It looks like they just trace a warning instead of trying to convert
>>>>to
>>>> a
>>>> RegExp.  Is that what we want to do?  Or should we add code that
>>>> converts
>>>> a string to regex?
>>>> 
>>>> Thoughts?
>>>> -Alex
>>>> 
>>>> On 7/19/17, 4:32 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>> 
>>>>> I added the utility functions. I think they can be very simple.
>>>>> 
>>>>>> On Jul 19, 2017, at 9:30 AM, Alex Harui <aha...@adobe.com.INVALID>
>>>>>> wrote:
>>>>>> 
>>>>>> Unless we are absolutely sure that everybody will need the code
>>>>>> generated
>>>>>> by the compiler, having the compiler call a framework function makes
>>>>>> it
>>>>>> easier for an app developer to make any adjustments to that code.
>>>>>>It
>>>>>> is
>>>>>> easier to monkey-patch a utility function than find-and-replace some
>>>>>> sequence of code the compiler has sprinkled throughout the output.
>>>>>> 
>>>>>> My 2 cents,
>>>>>> -Alex
>>>>>> 
>>>>>> On 7/18/17, 11:36 AM, "yishayw" <yishayj...@hotmail.com> wrote:
>>>>>> 
>>>>>>> Alex Harui-2 wrote
>>>>>>>> By
>>>>>>>> calling new utility functions, the developer has control over the
>>>>>>>> conversion.
>>>>>>> 
>>>>>>> I don't understand that point. Do you mean an app developer?
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapac
>>>>>>>he
>>>>>>> -f
>>>>>>> le
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>x-development.2333347.n4.nabble.com%2FFlexJS-String-match-tp63392p63
>>>>>>>40
>>>>>>> 5.
>>>>>>> ht
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>ml&data=02%7C01%7C%7C9ff1088402ef439ca27908d4ce0e97eb%7Cfa7b1b5a7b34
>>>>>>>43
>>>>>>> 87
>>>>>>> 94
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>>aed2c178decee1%7C0%7C0%7C636360009448210304&sdata=nprl9yHUtlsTHbIZxe
>>>>>>>Fq
>>>>>>> 2h
>>>>>>> %2
>>>>>>> FQNWmtimM%2BxAt0kJA8EcA%3D&reserved=0
>>>>>>> Sent from the Apache Flex Development mailing list archive at
>>>>>>> Nabble.com.
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>

Reply via email to