2 Replies Latest reply on Jun 15, 2016 5:32 AM by K.Daube

    Regular expression problem

    K.Daube Level 1

      Dear friends,

      In my script i have some sections which test the content of an edit field before it is processed further.

      Things like the following work perfectly:

      var re_Def = /#[A-Za-z][A-Za-z0-9_]+/;          // valid variable name ?
      items = ["#correct", "notcorrect", "#This_is4", "#thisIs", "@something", "#ALLOK", "", ];
      // search    0            -1          -1!!        -1!!          -1        -1!!     -1      <--- incorrect method
      // test    true         false         true        true        false       true    false    <--- correct method
      for (var j = 0; j < items.length; j++) {
        var item = items[j];
        alert ("'" + item + "' ==> " +  item.search(re_Def) + "\n" + re_Def.test(item));
      }
      var re_Def = /(\[ROW +\d+\]|\[COL +\d+\]|\[CELL +\d+, +\d+\]|Left *\(\d*\)|Right *\(\d*\)|Above *\(\d*\)|Below *\(\d*\))/;
      items = ["[ROW 17]", "[Row n]", "[ROW n]", "[CELL 3, 9]", "[CELL 3 9]", "Abbove()", "Right(3)"];
      // result  true        false      false         true         false        false         true    
      for (var j = 0; j < items.length; j++) {
        alert ("'" + items[j] + "' ==> " +  re_Def.test(items[j]));
      }
      

       

      But the following always return false, independly of the content of the string item:

      var re_Def = /{[EFJ]\d*}|{I}/;    // valid format def?
      var item = "{E27}";
      var result = re_Def.test(item);
      alert (result);                   // false !!
      

       

      RegEx Buddy tells me, that
      - the REGEX is correct
      - the result should be true, not false

      - The verbose defintion of the RegEx is:
      Match either the regular expression below (attempting the next alternative only if this one fails) «{[EFJ]\d*}»
         Match the character “{” literally «{»
         Match a single character present in the list “EFJ” «[EFJ]»
         Match a single digit 0..9 «\d*»
            Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
         Match the character “}” literally «}»
      Or match regular expression number 2 below (the entire match attempt fails if this one fails to match) «{I}»
         Match the characters “{I}” literally «{I}»

       

      Unrecognised typo? Faulty method test?

      Results are wrong as soon as i use character list [...] - but look at the first code block: there are also character lists which are handled correctly.