Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #17023

Re: Good use of bitwise NOT "~" or unnecessary obfuscation?

Message-ID <1466051.Cd1scNln3u@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Organization PointedEars Software (PES)
Date 2012-11-02 22:10 +0100
Subject Re: Good use of bitwise NOT "~" or unnecessary obfuscation?
Newsgroups comp.lang.javascript
References <50330d14-3a30-4885-9833-18c75717a04d@googlegroups.com> <XnsA0FF6988CAC95eejj99@194.109.133.133> <BMSdnRSFG8QIVA7NnZ2dnUVZ_vGdnZ2d@earthlink.com> <1805042.BzeuYpbCYS@PointedEars.de> <7MidnYXvqeq8ggnNnZ2dnUVZ_uGdnZ2d@earthlink.com>
Followup-To comp.lang.javascript

Followups directed to: comp.lang.javascript

Show all headers | View raw


Patricia Shanahan wrote:

> On 11/2/2012 10:41 AM, Thomas 'PointedEars' Lahn wrote:
>> Patricia Shanahan wrote:
>>> On 11/2/2012 2:22 AM, Evertjan. wrote:
>>> ...
>>>> if ( /foo/.test(someString) ) {..}
>>>>
>>>> I trust not understanding Regex is not a valid counterargument.
>>>
>>> If I'm prepared to look at it long enough, I can generally work out what
>>> a Regex does, but Regex does not seem to me to be a very human-friendly,
>>> smoothly readable language.
>>
>> That depends on the flavor and your experience with them.
> 
> Well, I don't quite have 30 years of experience with regular expressions
> yet, but it's getting close.

Which flavors?

>>> For this particular case, it looks OK if the probe really is a literal
>>> such as "foo".
>>
>> In exactly that case using a Regular Expression is overkill.  You need to
>> consider that for every RegExp literal in the code (and per ES 5.x in
>> every use of that literal), a new RegExp instance is being created.
>>
>>> Could you show me the code you would use for this if the probe were an
>>> actual parameter or variable with unknown contents?
>>>
>>> That is, what would you use to replace:
>>>
>>> if(someString.indexOf(someOtherString)) != -1)
>>
>> It is possible with
>>
>>    if ((new RegExp(someOtherString)).test(someString))
>>
>> but I would not use that.  However, the following can be useful and
>> necessary:
>>
>>    if ((new RegExp(someOtherString, "i")).test(someString))
>>
>> The caveat in both cases is that any special characters in the value of
>> `someOtherString' that should not assume their special meaning need to be
>> escaped.  This can be accomplished with a previous replace() –
>>
>>    if ((new RegExp(someOtherString.replace(/…/g), "i")).test(someString))
>>
>> – or with a user-defined method:
>>
>>    if ((new RegExp(jsx.regexp.escape(someOtherString), "i"))
>>        .test(someString))
> ...
> 
> Do you feel this is an improvement on basing the contains test on the
> String indexOf function?

The latter variants certainly are.

> If so, why?

Case-insensitive matching.

> Or is this just an illustration of how you would do it with regular
> expressions if indexOf did not exist?

Yes.
 
> My general view of regular expressions is that they have a few uses, but
> I've often seen code, in many languages, that seems to use them for the
> sake of using them, at the expense of making the code less readable.

The longer and better I know them, the more valid reasons I find to use 
them; not only *in* source code, but also *for writing* source code.  AISB, 
the readability of (code using) regular expressions depends very much on the 
flavor of regular expressions that is used (that the language/IDE is capable 
of) and the way you (can) write them in a programming language/IDE.

Because RegExp *literals* need to be delimited with `/' in ECMAScript 
implementations, some people think they need to escape `/' in string 
literals passed to the RegExp constructor (or elsewhere), or all special 
characters in character classes; actually they do not.  Attempting to 
simplify a regular expression often goes a long way towards better 
understanding them, and vice-versa.  You can find a lot of examples of that 
in my follow-ups in comp.lang.ALL and de.comp.lang.ALL.

In that sense I have devised RegExp.prototype.concat() (or 
jsx.regexp.concat()) so that a regular expression definition can span more 
than one line, and can have variable parts, *without* the need to use a 
string literal throughout (and the extra escaping that is required then) – 
or to wait for TC39 and implementors to catch up;

  var s = "baz";
  var rx =
    /foo/
    .concat(/bar/i)
    .concat(s)
    .concat(/bla/gm);

being equivalent to

  var rx = /foobarbazbla/gim;

And I had devised (independently of similar approaches) jsx.regexp.RegExp() 
so that you can use at least some features of Perl and Perl-Compatible 
Regular Expressions in ECMAScript implementations, many of which make 
regular expressions more powerful, some of which make them better readable 
and understandable.  For example,

  var rx = jsx.regexp.RegExp(
    /\s+ \w+ \s+  # Word delimited by whitespace/, "x");

is equivalent to

  var rx = /\s+\w+\s+/;

(Existing approaches are informing the implementation of new features now.)

See also: <http://PointedEars.de/scripts/test/regexp>


PointedEars
-- 
Danny Goodman's books are out of date and teach practices that are
positively harmful for cross-browser scripting.
  -- Richard Cornford, cljs, <cife6q$253$1$8300dec7@news.demon.co.uk> (2004)

Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Good use of bitwise NOT "~" or unnecessary obfuscation? RobG <rgqld@iinet.net.au> - 2012-11-01 18:32 -0700
  Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Denis McMahon <denismfmcmahon@gmail.com> - 2012-11-02 06:14 +0000
    Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-02 02:28 -0700
  Re: Good use of bitwise NOT "~" or unnecessary obfuscation? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-02 10:22 +0100
    Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Tim Streater <timstreater@greenbee.net> - 2012-11-02 10:37 +0100
    Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-02 06:25 -0700
      Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Asen Bozhilov <asen.bozhilov@gmail.com> - 2012-11-02 06:35 -0700
      Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-11-02 14:58 +0100
        Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-02 08:49 -0700
          Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-11-04 21:52 +0100
            Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Tim Streater <timstreater@greenbee.net> - 2012-11-04 22:49 +0000
              Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-11-05 13:18 +0100
              Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Scott Sauyet <scott.sauyet@gmail.com> - 2012-11-06 06:48 -0800
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Tim Streater <timstreater@greenbee.net> - 2012-11-06 15:04 +0000
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Gene Wirchenko <genew@ocis.net> - 2012-11-06 10:43 -0800
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Scott Sauyet <scott.sauyet@gmail.com> - 2012-11-06 11:22 -0800
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-06 12:16 -0800
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Scott Sauyet <scott.sauyet@gmail.com> - 2012-11-06 12:53 -0800
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-11-07 17:34 +0100
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-07 23:21 +0100
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-07 23:23 +0100
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Gene Wirchenko <genew@ocis.net> - 2012-11-07 17:00 -0800
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2012-11-08 07:16 +0100
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Dr J R Stockton <reply1245@merlyn.demon.co.uk.invalid> - 2012-11-07 17:50 +0000
            Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Dr J R Stockton <reply1245@merlyn.demon.co.uk.invalid> - 2012-11-05 19:26 +0000
              Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Stefan Weiss <krewecherl@gmail.com> - 2012-11-07 22:13 +0100
        Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Gene Wirchenko <genew@ocis.net> - 2012-11-02 09:51 -0700
      Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-02 18:41 +0100
        Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-02 12:30 -0700
          Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Tim Streater <timstreater@greenbee.net> - 2012-11-02 20:33 +0000
            Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Hans-Georg Michna <hans-georgNoEmailPlease@michna.com> - 2012-11-04 21:57 +0100
              Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Tim Streater <timstreater@greenbee.net> - 2012-11-04 22:44 +0000
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Andrew Poulos <ap_prog@hotmail.com> - 2012-11-05 15:41 +1100
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Tim Streater <timstreater@greenbee.net> - 2012-11-05 09:07 +0000
          Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-02 22:10 +0100
            Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-02 15:22 -0700
              Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-03 10:19 +0100
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Patricia Shanahan <pats@acm.org> - 2012-11-03 13:05 -0700
                Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-03 21:39 +0100
        Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-11-03 12:26 +0100
  Re: Good use of bitwise NOT "~" or unnecessary obfuscation? "Jukka K. Korpela" <jkorpela@cs.tut.fi> - 2012-11-02 12:28 +0200
    Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Gene Wirchenko <genew@ocis.net> - 2012-11-02 10:00 -0700
  Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Asen Bozhilov <asen.bozhilov@gmail.com> - 2012-11-02 06:15 -0700
  Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Scott Sauyet <scott.sauyet@gmail.com> - 2012-11-06 06:32 -0800
    Re: Good use of bitwise NOT "~" or unnecessary obfuscation? RobG <rgqld@iinet.net.au> - 2012-11-06 18:23 -0800
      Re: Good use of bitwise NOT "~" or unnecessary obfuscation? Scott Sauyet <scott.sauyet@gmail.com> - 2012-11-07 11:22 -0800

csiph-web