Grammalecte  Hex Artifact Content

Artifact aea1fc20a2b794640439faae9869c87ef4b49837beb6a1dd1c37b01ba962272e:

  • File js_extension/string.js — part of check-in [3672cec3b9] at 2018-04-27 08:25:35 on branch trunk — [build] JS: new method for String: isAlpha (user: olr size: 2139) [more...]

0000: 0a 2f 2f 20 53 74 72 69 6e 67 0a 2f 2a 6a 73 6c  .// String./*jsl
0010: 69 6e 74 20 65 73 76 65 72 73 69 6f 6e 3a 20 36  int esversion: 6
0020: 2a 2f 0a 0a 69 66 20 28 53 74 72 69 6e 67 2e 70  */..if (String.p
0030: 72 6f 74 6f 74 79 70 65 2e 67 72 61 6d 6d 61 6c  rototype.grammal
0040: 65 63 74 65 20 3d 3d 3d 20 75 6e 64 65 66 69 6e  ecte === undefin
0050: 65 64 29 20 7b 0a 20 20 20 20 53 74 72 69 6e 67  ed) {.    String
0060: 2e 70 72 6f 74 6f 74 79 70 65 2e 67 6c 5f 63 6f  .prototype.gl_co
0070: 75 6e 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28  unt = function (
0080: 73 53 65 61 72 63 68 2c 20 62 4f 76 65 72 6c 61  sSearch, bOverla
0090: 70 70 69 6e 67 29 20 7b 0a 20 20 20 20 20 20 20  pping) {.       
00a0: 20 2f 2f 20 68 74 74 70 3a 2f 2f 6a 73 70 65 72   // http://jsper
00b0: 66 2e 63 6f 6d 2f 73 74 72 69 6e 67 2d 6f 63 75  f.com/string-ocu
00c0: 72 72 65 6e 63 65 2d 73 70 6c 69 74 2d 76 73 2d  rrence-split-vs-
00d0: 6d 61 74 63 68 2f 38 0a 20 20 20 20 20 20 20 20  match/8.        
00e0: 69 66 20 28 73 53 65 61 72 63 68 2e 6c 65 6e 67  if (sSearch.leng
00f0: 74 68 20 3c 3d 20 30 29 20 7b 0a 20 20 20 20 20  th <= 0) {.     
0100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
0110: 69 73 2e 6c 65 6e 67 74 68 20 2b 20 31 3b 0a 20  is.length + 1;. 
0120: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0130: 20 6c 65 74 20 6e 4f 63 63 75 72 20 3d 20 30 3b   let nOccur = 0;
0140: 0a 20 20 20 20 20 20 20 20 6c 65 74 20 69 50 6f  .        let iPo
0150: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 6c  s = 0;.        l
0160: 65 74 20 6e 53 74 65 70 20 3d 20 28 62 4f 76 65  et nStep = (bOve
0170: 72 6c 61 70 70 69 6e 67 29 20 3f 20 31 20 3a 20  rlapping) ? 1 : 
0180: 73 53 65 61 72 63 68 2e 6c 65 6e 67 74 68 3b 0a  sSearch.length;.
0190: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 28          while ((
01a0: 69 50 6f 73 20 3d 20 74 68 69 73 2e 69 6e 64 65  iPos = this.inde
01b0: 78 4f 66 28 73 53 65 61 72 63 68 2c 20 69 50 6f  xOf(sSearch, iPo
01c0: 73 29 29 20 3e 3d 20 30 29 20 7b 0a 20 20 20 20  s)) >= 0) {.    
01d0: 20 20 20 20 20 20 20 20 6e 4f 63 63 75 72 2b 2b          nOccur++
01e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 50  ;.            iP
01f0: 6f 73 20 2b 3d 20 6e 53 74 65 70 3b 0a 20 20 20  os += nStep;.   
0200: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72       }.        r
0210: 65 74 75 72 6e 20 6e 4f 63 63 75 72 3b 0a 20 20  eturn nOccur;.  
0220: 20 20 7d 3b 0a 20 20 20 20 53 74 72 69 6e 67 2e    };.    String.
0230: 70 72 6f 74 6f 74 79 70 65 2e 67 6c 5f 69 73 44  prototype.gl_isD
0240: 69 67 69 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20  igit = function 
0250: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  () {.        ret
0260: 75 72 6e 20 28 74 68 69 73 2e 73 65 61 72 63 68  urn (this.search
0270: 28 2f 5e 5b 30 2d 39 e2 81 b0 c2 b9 c2 b2 c2 b3  (/^[0-9.........
0280: e2 81 b4 e2 81 b5 e2 81 b6 e2 81 b7 e2 81 b8 e2  ................
0290: 81 b9 5d 2b 24 2f 29 20 21 3d 3d 20 2d 31 29 3b  ..]+$/) !== -1);
02a0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 53 74 72 69  .    };.    Stri
02b0: 6e 67 2e 70 72 6f 74 6f 74 79 70 65 2e 67 6c 5f  ng.prototype.gl_
02c0: 69 73 41 6c 70 68 61 20 3d 20 66 75 6e 63 74 69  isAlpha = functi
02d0: 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20 20 20  on () {.        
02e0: 72 65 74 75 72 6e 20 28 74 68 69 73 2e 73 65 61  return (this.sea
02f0: 72 63 68 28 2f 5e 5b 61 2d 7a 41 2d 5a c3 a0 2d  rch(/^[a-zA-Z..-
0300: c3 b6 c3 80 2d c3 96 c3 b8 2d c3 bf c3 98 2d c3  ....-....-....-.
0310: 9f c4 80 2d ca af 5d 2b 24 2f 29 20 21 3d 3d 20  ...-..]+$/) !== 
0320: 2d 31 29 3b 0a 20 20 20 20 7d 3b 0a 20 20 20 20  -1);.    };.    
0330: 53 74 72 69 6e 67 2e 70 72 6f 74 6f 74 79 70 65  String.prototype
0340: 2e 67 6c 5f 69 73 4c 6f 77 65 72 43 61 73 65 20  .gl_isLowerCase 
0350: 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  = function () {.
0360: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
0370: 74 68 69 73 2e 73 65 61 72 63 68 28 2f 5e 5b 61  this.search(/^[a
0380: 2d 7a c3 a0 2d c3 b6 c3 b8 2d c3 bf 30 2d 39 2d  -z..-....-..0-9-
0390: 5d 2b 24 2f 29 20 21 3d 3d 20 2d 31 29 3b 0a 20  ]+$/) !== -1);. 
03a0: 20 20 20 7d 3b 0a 20 20 20 20 53 74 72 69 6e 67     };.    String
03b0: 2e 70 72 6f 74 6f 74 79 70 65 2e 67 6c 5f 69 73  .prototype.gl_is
03c0: 55 70 70 65 72 43 61 73 65 20 3d 20 66 75 6e 63  UpperCase = func
03d0: 74 69 6f 6e 20 28 29 20 7b 0a 20 20 20 20 20 20  tion () {.      
03e0: 20 20 72 65 74 75 72 6e 20 28 74 68 69 73 2e 73    return (this.s
03f0: 65 61 72 63 68 28 2f 5e 5b 41 2d 5a c3 80 2d c3  earch(/^[A-Z..-.
0400: 96 c3 98 2d c3 9f c5 92 30 2d 39 2d 5d 2b 24 2f  ...-....0-9-]+$/
0410: 29 20 21 3d 3d 20 2d 31 29 3b 0a 20 20 20 20 7d  ) !== -1);.    }
0420: 3b 0a 20 20 20 20 53 74 72 69 6e 67 2e 70 72 6f  ;.    String.pro
0430: 74 6f 74 79 70 65 2e 67 6c 5f 69 73 54 69 74 6c  totype.gl_isTitl
0440: 65 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 29 20  e = function () 
0450: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
0460: 20 28 74 68 69 73 2e 73 65 61 72 63 68 28 2f 5e   (this.search(/^
0470: 5b 41 2d 5a c3 80 2d c3 96 c3 98 2d c3 9f c5 92  [A-Z..-....-....
0480: 5d 5b 61 2d 7a c3 a0 2d c3 b6 c3 b8 2d c3 bf 27  ][a-z..-....-..'
0490: e2 80 99 2d 5d 2b 24 2f 29 20 21 3d 3d 20 2d 31  ...-]+$/) !== -1
04a0: 29 3b 0a 20 20 20 20 7d 3b 0a 20 20 20 20 53 74  );.    };.    St
04b0: 72 69 6e 67 2e 70 72 6f 74 6f 74 79 70 65 2e 67  ring.prototype.g
04c0: 6c 5f 74 6f 43 61 70 69 74 61 6c 69 7a 65 20 3d  l_toCapitalize =
04d0: 20 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a 20   function () {. 
04e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
04f0: 69 73 2e 73 6c 69 63 65 28 30 2c 31 29 2e 74 6f  is.slice(0,1).to
0500: 55 70 70 65 72 43 61 73 65 28 29 20 2b 20 74 68  UpperCase() + th
0510: 69 73 2e 73 6c 69 63 65 28 31 29 2e 74 6f 4c 6f  is.slice(1).toLo
0520: 77 65 72 43 61 73 65 28 29 3b 0a 20 20 20 20 7d  werCase();.    }
0530: 3b 0a 20 20 20 20 53 74 72 69 6e 67 2e 70 72 6f  ;.    String.pro
0540: 74 6f 74 79 70 65 2e 67 6c 5f 65 78 70 61 6e 64  totype.gl_expand
0550: 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 6f 4d 61   = function (oMa
0560: 74 63 68 29 20 7b 0a 20 20 20 20 20 20 20 20 6c  tch) {.        l
0570: 65 74 20 73 4e 65 77 20 3d 20 74 68 69 73 3b 0a  et sNew = this;.
0580: 20 20 20 20 20 20 20 20 66 6f 72 20 28 6c 65 74          for (let
0590: 20 69 20 3d 20 30 3b 20 69 20 3c 20 6f 4d 61 74   i = 0; i < oMat
05a0: 63 68 2e 6c 65 6e 67 74 68 20 3b 20 69 2b 2b 29  ch.length ; i++)
05b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   {.            l
05c0: 65 74 20 7a 20 3d 20 6e 65 77 20 52 65 67 45 78  et z = new RegEx
05d0: 70 28 22 5c 5c 5c 5c 22 2b 70 61 72 73 65 49 6e  p("\\\\"+parseIn
05e0: 74 28 69 29 2c 20 22 67 22 29 3b 0a 20 20 20 20  t(i), "g");.    
05f0: 20 20 20 20 20 20 20 20 73 4e 65 77 20 3d 20 73          sNew = s
0600: 4e 65 77 2e 72 65 70 6c 61 63 65 28 7a 2c 20 6f  New.replace(z, o
0610: 4d 61 74 63 68 5b 69 5d 29 3b 0a 20 20 20 20 20  Match[i]);.     
0620: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 72 65 74     }.        ret
0630: 75 72 6e 20 73 4e 65 77 3b 0a 20 20 20 20 7d 3b  urn sNew;.    };
0640: 0a 20 20 20 20 53 74 72 69 6e 67 2e 70 72 6f 74  .    String.prot
0650: 6f 74 79 70 65 2e 67 6c 5f 74 72 69 6d 52 69 67  otype.gl_trimRig
0660: 68 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 73  ht = function (s
0670: 43 68 61 72 73 29 20 7b 0a 20 20 20 20 20 20 20  Chars) {.       
0680: 20 6c 65 74 20 7a 20 3d 20 6e 65 77 20 52 65 67   let z = new Reg
0690: 45 78 70 28 22 5b 22 2b 73 43 68 61 72 73 2b 22  Exp("["+sChars+"
06a0: 5d 2b 24 22 29 3b 0a 20 20 20 20 20 20 20 20 72  ]+$");.        r
06b0: 65 74 75 72 6e 20 74 68 69 73 2e 72 65 70 6c 61  eturn this.repla
06c0: 63 65 28 7a 2c 20 22 22 29 3b 0a 20 20 20 20 7d  ce(z, "");.    }
06d0: 3b 0a 20 20 20 20 53 74 72 69 6e 67 2e 70 72 6f  ;.    String.pro
06e0: 74 6f 74 79 70 65 2e 67 6c 5f 74 72 69 6d 4c 65  totype.gl_trimLe
06f0: 66 74 20 3d 20 66 75 6e 63 74 69 6f 6e 20 28 73  ft = function (s
0700: 43 68 61 72 73 29 20 7b 0a 20 20 20 20 20 20 20  Chars) {.       
0710: 20 6c 65 74 20 7a 20 3d 20 6e 65 77 20 52 65 67   let z = new Reg
0720: 45 78 70 28 22 5e 5b 22 2b 73 43 68 61 72 73 2b  Exp("^["+sChars+
0730: 22 5d 2b 22 29 3b 0a 20 20 20 20 20 20 20 20 72  "]+");.        r
0740: 65 74 75 72 6e 20 74 68 69 73 2e 72 65 70 6c 61  eturn this.repla
0750: 63 65 28 7a 2c 20 22 22 29 3b 0a 20 20 20 20 7d  ce(z, "");.    }
0760: 3b 0a 20 20 20 20 53 74 72 69 6e 67 2e 70 72 6f  ;.    String.pro
0770: 74 6f 74 79 70 65 2e 67 6c 5f 74 72 69 6d 20 3d  totype.gl_trim =
0780: 20 66 75 6e 63 74 69 6f 6e 20 28 73 43 68 61 72   function (sChar
0790: 73 29 20 7b 0a 20 20 20 20 20 20 20 20 6c 65 74  s) {.        let
07a0: 20 7a 31 20 3d 20 6e 65 77 20 52 65 67 45 78 70   z1 = new RegExp
07b0: 28 22 5e 5b 22 2b 73 43 68 61 72 73 2b 22 5d 2b  ("^["+sChars+"]+
07c0: 22 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20  ");.        let 
07d0: 7a 32 20 3d 20 6e 65 77 20 52 65 67 45 78 70 28  z2 = new RegExp(
07e0: 22 5b 22 2b 73 43 68 61 72 73 2b 22 5d 2b 24 22  "["+sChars+"]+$"
07f0: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
0800: 6e 20 74 68 69 73 2e 72 65 70 6c 61 63 65 28 7a  n this.replace(z
0810: 31 2c 20 22 22 29 2e 72 65 70 6c 61 63 65 28 7a  1, "").replace(z
0820: 32 2c 20 22 22 29 3b 0a 20 20 20 20 7d 3b 0a 0a  2, "");.    };..
0830: 20 20 20 20 53 74 72 69 6e 67 2e 70 72 6f 74 6f      String.proto
0840: 74 79 70 65 2e 67 72 61 6d 6d 61 6c 65 63 74 65  type.grammalecte
0850: 20 3d 20 74 72 75 65 3b 0a 7d 0a                  = true;.}.