Skip to content

Instantly share code, notes, and snippets.

@0mg
Created February 17, 2010 05:31
Show Gist options
  • Save 0mg/306333 to your computer and use it in GitHub Desktop.
Save 0mg/306333 to your computer and use it in GitHub Desktop.
JS Tips

正規表現

マッチの性質

"123abc".match(/abc|3ab/) /* 3ab */

文字列の先頭から検索が始まり、マッチすると途中で検索が終わる。

[123]abc  abc? NO. 3ab? NO.
1[23a]bc  abc? NO. 3ab? NO.
12[3ab]c  abc? NO. 3ab? YES. return "3ab";
123[abc]

キャプチャ

"123abc".match(/(abc)|123/) /* ["123", undefined] */

(キャプチャする括弧)で何もキャプチャされなかった場合、 undefined を返す。

"o".replace(/(o)/,"<$1>") /* "<o>" */
"o".replace(/(x)|o/,"<$1>") /* "<>" */

replace では、空文字を返す。

\b のふるまい

/a\b/.test("_a_") /* false */
/a\b/.test("-a_") /* false */
/a\b/.test("_a-") /* true */

数値

小数は正確でない

1 - 0.9 !== 0.1 /* true */

巨大すぎる数は正しく扱えない

9999999999999999 === 10000000000000000 /* true */

文字列

><を使って文字同士のコード番号を比較できる

"a" < "b" /* true */
"b" < "c" /* true */
"c" < "a" /* false */

JavaScript でブロックスコープを実現する

var a = 10;
with ({a : 20}) {
  alert(a); // 20
}
alert(a); // 10
コナミコマンド(105文字) <body onload=a=[] onkeyup=a.unshift
(event.keyCode-37);a.length=10;a=='28,29,2,0,2,0,3,3,1,1'&&alert(573)>
改行を含む任意の一文字にマッチする正規表現、[\s\S]じゃなくて[^]のほうが短い。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment