JavaScriptã®ãŠè©±ã§ã™ã€‚node.jsã«é™ã‚‰ãªã„話ã ã¨æ€ã„ã¾ã™ãŒã€node.jsã§ã®å‹•作を説明ã—ã¾ã™ã€‚
一言ã§è¨€ã†ã¨ã€"g"オプションをã¤ã‘ãŸRegExpã®test()
ã®å‘¼ã³å‡ºã—ã¯ãƒ«ãƒ¼ãƒ—(?)ã—ã¾ã™ã€‚
説明ã™ã‚‹ã‚ˆã‚Šã‚‚ã€å®Ÿéš›ã®å‹•ãを見ã¦ã¿ã¾ã—ょã†ã€‚
% node
> re = new RegExp('xyz', 'g');
/xyz/g
> s = 'aaaxyzbbbxyz';
'aaaxyzbbbxyz'
> re.test(s)
true
> re.lastIndex
6
> re.test(s)
true
> re.lastIndex
12
> re.test(s)
false
> re.lastIndex
0
> re.test(s)
true
> re.lastIndex
6
ã¨ã„ã†æ„Ÿã˜ã§ã€re.lastIndex
ãŒãƒžãƒƒãƒã‚’é–‹å§‹ã™ã‚‹ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’ä¿æŒã—ã¦ã„るよã†ã§ã™ã€‚ã§ã€æœ€å¾Œã¾ã§è¡Œã£ãŸã‚‰åˆã‚ã«æˆ»ã‚‹ã¨ã€‚
"g"オプションをã¤ã‘ãªã‘れã°ã“ã‚“ãªã“ã¨ã«ã¯ãªã‚‰ãšã€lastIndex
も常ã«0ã®ã¾ã¾ã§ã™ã€‚
ã¤ã„ã§ã«ã€RegExp.test()
ã¨RegExp.exec()
ã¨String.match()
ã¨String.search()
ã®ãƒ™ãƒ³ãƒãƒžãƒ¼ã‚¯ã‚‚ã—ã¦ãŠãã¾ã—ãŸã€‚
一ã¤ã¯ã€node.js用。
https://gist.github.com/dai-shi/5169296
ã‚‚ã†ä¸€ã¤ã¯ã€ãƒ–ラウザ用。自分ã§ä½œã‚ã†ã‹ã¨æ€ã£ãŸã‚‰ã€æ—¢ã«ã‚りã¾ã—ãŸã€‚
http://jsperf.com/regex-test-or-exec-or-string-search-or-match
ã‚„ã¯ã‚Šã€æ£è¦è¡¨ç¾ã®ãƒžãƒƒãƒã‚’確èªã™ã‚‹ã ã‘ãªã‚‰ã€RegExp.test()
ãŒä¸€ç•ªã‚ˆã•ãã†ã§ã™ã。
ã¡ã‚‡ã£ã¨é¢ç™½ã„çµæžœã ã£ãŸã®ã¯Firefoxã®ã‚±ãƒ¼ã‚¹ã§ã€RegExp.test()
ã¨RegExp.exec()
ã®é€Ÿã•ãŒã»ã¨ã‚“ã©å¤‰ã‚りã¾ã›ã‚“ã§ã—ãŸã€‚ã¤ã¾ã‚Šã€test()
ã®å†…部ã§exec()
を呼ã³å‡ºã—ã¡ã‚ƒã£ã¦ã‚‹æ„Ÿã˜ã§ã™ã€‚Chromeã¨node.jsã§ã¯ï¼ˆã©ã¡ã‚‰ã‚‚v8ã ã‘ã©ï¼‰å·®ãŒå‡ºã¦ã„ã‚‹ã®ã§ã€Firefoxã®JavaScriptã‚¨ãƒ³ã‚¸ãƒ³ã¯æ”¹å–„ã®ä½™åœ°ãŒã‚ã‚‹ã¨ã„ã†ã“ã¨ã§ã—ょã†ã€‚
å‰ã‹ã‚‰æ€ã£ã¦ã„ã¾ã—ãŸãŒã€Chromeã®æ£è¦è¡¨ç¾ã®å‡¦ç†ã¯é€Ÿã„ã§ã™ãã‡ã€‚Firefoxã¨ã¯æ¯”ã¹ã‚‚ã®ã«ãªã‚‰ãªã„ã§ã™ã€‚