RegExp
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2015å¹´7æ.
* Some parts of this feature may have varying levels of support.
RegExp ãªãã¸ã§ã¯ãã¯ãããã¹ãããã¿ã¼ã³ã¨ç
§åããããã«ä½¿ç¨ãã¾ãã
æ£è¦è¡¨ç¾ã®å ¥éè¨äºã¯ã JavaScript ã¬ã¤ãã®æ£è¦è¡¨ç¾ããèªã¿ãã ãããæ£è¦è¡¨ç¾ã®æ§æã®è©³ç´°æ å ±ã«ã¤ãã¦ã¯ãæ£è¦è¡¨ç¾ãªãã¡ã¬ã³ã¹ãåç §ãã¦ãã ããã
解説
>ãªãã©ã«è¨æ³ã¨ã³ã³ã¹ãã©ã¯ã¿ã¼
RegExp ãªãã¸ã§ã¯ããçæããã«ã¯ 2 éãã®æ¹æ³ãããã¾ããããªãã©ã«è¨æ³ãã¨ãã³ã³ã¹ãã©ã¯ã¿ã¼ãã§ãã
- ããªãã©ã«è¨æ³ãã¯ãã¿ã¼ã³ã 2 æ¬ã®ã¹ã©ãã·ã¥ã§å²ã¿ã 2 æ¬ç®ã®ã¹ã©ãã·ã¥ã®å¾ã«ãªãã·ã§ã³ã§ãã©ã°ãç¶ãã¾ãã
- ãã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãã¯æååã¾ãã¯
RegExpãªãã¸ã§ã¯ããæåã®å¼æ°ã¨ãã¦åãããªãã·ã§ã³ã®ãã©ã°ãæååã§ 2 çªç®ã®å¼æ°ã¨ãã¦åãã¾ãã
以ä¸ã® 3 ã¤ã®å¼ã¯ãåãæ£è¦è¡¨ç¾ãªãã¸ã§ã¯ããçæãã¾ãã
const re = /ab+c/i; // ãªãã©ã«è¨æ³
// ã¾ãã¯
const re = new RegExp("ab+c", "i"); // æåã®å¼æ°ã«æååã®ãã¿ã¼ã³ã渡ããã³ã³ã¹ãã©ã¯ã¿ã¼
// ã¾ãã¯
const re = new RegExp(/ab+c/, "i"); // æåã®å¼æ°ã«æ£è¦è¡¨ç¾ãªãã©ã«ã渡ããã³ã³ã¹ãã©ã¯ã¿ã¼
æ£è¦è¡¨ç¾ã¯ä½¿ç¨ã§ããããã«ãªãåã«ãã³ã³ãã¤ã«ããå¿ è¦ãããã¾ãããã®å¦çã«ãã£ã¦ãããå¹ççã«ç §åãè¡ããã¨ãã§ããããã«ãªãã¾ãããã®å¦çã®è©³ç´°ã¯ããããããã®ããã¥ã¡ã³ãã«è¨è¼ããã¦ãã¾ãã
ãªãã©ã«è¨æ³ã§ã¯ãæ£è¦è¡¨ç¾ãè©ä¾¡ãããã¨ãã«ã³ã³ãã¤ã«ãè¡ããã¾ãã䏿¹ãRegExp ãªãã¸ã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã new RegExp('ab+c') ã¯ãå®è¡æã«æ£è¦è¡¨ç¾ãã³ã³ãã¤ã«ãããã¨ã«ãªãã¾ãã
åçãªå
¥åããæ£è¦è¡¨ç¾ãçæããå ´åã«ã¯ã RegExp() ã³ã³ã¹ãã©ã¯ã¿ã¼ã®æåã®å¼æ°ã¨ãã¦ãæååã使ç¨ãã¦ãã ããã
ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ãã©ã°
new RegExp(/ab+c/, flags) ã¨ããå¼ã¯æ°ãã RegExp ãçæãã¾ããã第 1 弿°ãå
ã¨ãã¦ä½¿ç¨ãã第 2 弿°ã§æå®ããããã©ã°ã¨ãã¦ä½¿ç¨ãã¦çæãã¾ãã
ã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã使ç¨ããå ´åã¯ãéå¸¸ã®æåã¨ã¹ã±ã¼ãã®è¦åï¼æååå
ã«ç¹æ®æåãå«ã¾ããã¨ããåã« \ ãä»å ããï¼ãå¿
é ã§ãã
ä¾ãã°ãä»¥ä¸ 2 ã¤ã®æ§æã¯åçã§ãã
const re = /\w+/;
// ã¾ãã¯
const re = new RegExp("\\w+");
æ£è¦è¡¨ç¾ã®ç¹æ®ãªæ±ã
ã¡ã¢:
ä½ãããæ£è¦è¡¨ç¾ãã§ãããã©ããã¯ãããã¯ã¿ã¤ãã³ã°ã«ãªãã¾ãã RegExp ã§ããå¿
è¦ã¯ããã¾ããã
ããã¤ãã®çµã¿è¾¼ã¿ã¡ã½ããã¯ãæ£è¦è¡¨ç¾ãç¹å¥ã«æ±ãã¾ãã x ãæ£è¦è¡¨ç¾ã§ãããã©ãããè¤æ°ã®ã¹ããããçµã¦å¤æãã¾ãã
xã¯ãªãã¸ã§ã¯ãã§ãªããã°ãªãã¾ããï¼ããªããã£ãã§ã¯ãªãï¼ãx[Symbol.match]ãundefinedã§ãªãå ´åããããçå¤ã§ãããã©ããã調ã¹ã¾ãã- ããã§ã¯ãªãå ´åã
x[Symbol.match]ãundefinedã§ããã°ãxãRegExpã³ã³ã¹ãã©ã¯ã¿ã¼ã§ä½ããããã©ããã調ã¹ã¾ããï¼ãã®ã¹ããããçºçããã®ã¯ç¨ã§ããxãæ¹ããããã¦ããªãRegExpãªãã¸ã§ã¯ãã§ããã°ãSymbol.matchããããã£ãæã¤ã¯ãã ããã§ããï¼
ã»ã¨ãã©ã®å ´åã Symbol.match ã®ãã§ãã¯ãéããã¨ã«æ³¨æãã¦ãã ãããããã¯ã¤ã¾ããæ¬¡ã®ãããªãã¨ã§ãã
- å®éã®
RegExpãªãã¸ã§ã¯ãã®Symbol.matchããããã£ã®å¤ãå½å¤ã§ãããundefinedã§ã¯ãªãã£ãå ´åãï¼execã[Symbol.replace]()ã®ããã«ä»ã®ãã¹ã¦ããã®ã¾ã¾ã§ãï¼ãæ£è¦è¡¨ç¾ã§ã¯ãªããã®ããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã RegExpã§ã¯ãªããªãã¸ã§ã¯ããSymbol.matchããããã£ãæã£ã¦ããã¨ãæ£è¦è¡¨ç¾ã§ãããã®ããã«æ±ããã¾ãã
ãã®é¸æã¯ [Symbol.match]() ãç
§åã«ä½¿ç¨ãããã¨ãæå³ããããããã£ã§ãããã¨ãæããã表ãã¦ããããã§ããï¼exec ã使ç¨ãããã¨ãã§ãã¾ãããã·ã³ãã«ã®ããããã£ã§ã¯ãªãã®ã§ã誤æ¤åºãå¤ãããã§ãããï¼ãæ£è¦è¡¨ç¾ãç¹å¥æ±ãããå ´æã¯æ¬¡ã®ã¨ããã§ãã
String.prototype.endsWith(),startsWith(),includes()ã§ã¯ãæåã®å¼æ°ãæ£è¦è¡¨ç¾ã®å ´åã¯TypeErrorãçºçãã¾ããString.prototype.matchAll()ã¨replaceAll()ã¯ãæåã®å¼æ°ãæ£è¦è¡¨ç¾ã§ããå ´åã global ãã©ã°ã[Symbol.matchAll]()ã¾ãã¯[Symbol.replace]()ã¡ã½ãããå¼ã³åºãåã«è¨å®ããã¾ããRegExp()ã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãpatternãï¼ä»ã®ããã¤ãã®æ¡ä»¶ãæºããã¦ï¼æ£è¦è¡¨ç¾ã¨å¤æãããå ´åãpatternãç´æ¥è¿ãã¾ããpatternãæ£è¦è¡¨ç¾ã§ããå ´åãpatternãæååã«å¤æããã®ã§ã¯ãªããsourceã¨flagsããããã£ã«åãåããããã¨ã«ãªãã¾ãã
ä¾ãã°ã String.prototype.endsWith() ã¯ãã¹ã¦ã®å
¥åå¤ãæååã¸ã¨å¼·å¶ãã¾ããã弿°ãæ£è¦è¡¨ç¾ã®å ´åããã®é¢æ°ãæååã¨ç
§åããã ãã®ããã«è¨è¨ããã¦ãããæ£è¦è¡¨ç¾ã使ç¨ãããã¨ã¯éçºè
ã®ééãã¨èãããããä¾å¤ãçºçããã¾ãã
"foobar".endsWith({ toString: () => "bar" }); // true
"foobar".endsWith(/bar/); // TypeError: First argument to String.prototype.endsWith must not be a regular expression
ãã®ãã§ãã¯ãåé¿ããã«ã¯ã [Symbol.match] ã« undefined ã§ã¯ãªãå½å¤ãè¨å®ãã¦ãã ããããã®å ´åãæ£è¦è¡¨ç¾ã¯ String.prototype.match() ã«ã¯ä½¿ç¨ã§ãã¾ãããï¼[Symbol.match] ããªããã° match() 㯠re.toString() ã§è¿½å ããã¹ã©ãã·ã¥ 2 æ¬ãæã¤æ°ãã RegExp ãªãã¸ã§ã¯ããæ§ç¯ããã®ã§ï¼ãäºå®ä¸ä»ã®ãã¹ã¦ã«ä½¿ç¨ãããã¨ãå¯è½ã§ãã
const re = /bar/g;
re[Symbol.match] = false;
"/bar/g".endsWith(re); // true
re.exec("bar"); // [ 'bar', index: 0, input: 'bar', groups: undefined ]
"bar & bar".replace(re, "foo"); // 'foo & foo'
Perl 風㮠RegExp ããããã£
RegExp ã®ããããã£ã®ããã¤ãã¯é·ãååã¨çãï¼Perl 風ã®ï¼ååãããã¾ããã©ã¡ãã®ååãåãå¤ãåç
§ãã¾ããï¼Perl 㯠JavaScript ãæ£è¦è¡¨ç¾ãã¢ãã«ã«ããããã°ã©ãã³ã°è¨èªã§ããï¼éæ¨å¥¨ã® RegExp ã®ããããã£ãåç
§ãã¦ãã ããã
ã³ã³ã¹ãã©ã¯ã¿ã¼
RegExp()-
æ°ãã
RegExpãªãã¸ã§ã¯ããçæãã¾ãã
éçããããã£
RegExp.$1, â¦,RegExp.$9-
èªã¿åãå°ç¨ã®éçããããã£ã§ãæ¬å¼§ã§å²ã¾ããä¸è´ããé¨åæååãæ ¼ç´ãã¾ãã
RegExp.input($_)-
éçããããã£ã§ãæ£è¦è¡¨ç¾ãæ£å¸¸ã«ä¸è´ããæå¾ã®æååãæ ¼ç´ãã¾ãã
RegExp.lastMatch($&)-
èªã¿åãå°ç¨ã®éçããããã£ã§ãæå¾ã«ä¸è´ããé¨åæååãæ ¼ç´ãã¾ãã
RegExp.lastParen($+)-
èªã¿åãå°ç¨ã®éçããããã£ã§ãæå¾ã®æ¬å¼§ã§å²ã¾ããé¨åæååã®ä¸è´ãæ ¼ç´ãã¾ãã
RegExp.leftContext($`)-
èªã¿åãå°ç¨ã®éçããããã£ã§ãæè¿ä¸è´ããæååã®åã®é¨åæååãæ ¼ç´ãã¾ãã
RegExp.rightContext($')-
èªã¿åãå°ç¨ã®éçããããã£ã§ãæè¿ä¸è´ããæåå以ä¸ã®é¨åæååãæ ¼ç´ãã¾ãã
RegExp[Symbol.species]-
æ´¾çãªãã¸ã§ã¯ããçæããããã«ä½¿ç¨ãããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã§ãã
éçã¡ã½ãã
RegExp.escape()-
æååå ã®æ½å¨çãªæ£è¦è¡¨ç¾æ§ææåãã¨ã¹ã±ã¼ããããªãã©ã«ãã¿ã¼ã³ã¨ãã¦
RegExp()ã³ã³ã¹ãã©ã¯ã¿ã¼ã§å®å ¨ã«ä½¿ç¨ã§ããæ°ããæååãè¿ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ããããã£
ãããã®ããããã£ã¯ RegExp.prototype ã§å®ç¾©ããã¦ããããã¹ã¦ã® RegExp ã¤ã³ã¹ã¿ã³ã¹ã§å
±æããã¾ãã
RegExp.prototype.constructor-
ãã®ã¤ã³ã¹ã¿ã³ã¹ãªãã¸ã§ã¯ãã使ããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã
RegExpã¤ã³ã¹ã¿ã³ã¹ã®å ´åãåæå¤ã¯RegExpã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã RegExp.prototype.dotAll-
.ãæ¹è¡æåã«ä¸è´ããããã©ããã®ãã©ã°ã§ãã RegExp.prototype.flags-
RegExpãªãã¸ã§ã¯ãã®ãã©ã°ããæãæååã§ãã RegExp.prototype.global-
対象æååã§ä¸è´ããå¯è½æ§ããããã¹ã¦ã®ãã®ã«å¯¾ãã¦æ£è¦è¡¨ç¾ãæ¤æ»ããããããã¨ããæåã«ä¸è´ãããã®ã«å¯¾ãã¦ã®ã¿æ¤æ»ããã©ããã®ãã©ã°ã§ãã
RegExp.prototype.hasIndices-
æ£è¦è¡¨ç¾ã®çµæã§ããã£ããã£ããé¨åæååã®å é ã¨æ«å°¾ã®ä½ç½®ãåºåãããã©ããã®ãã©ã°ã§ãã
RegExp.prototype.ignoreCase-
æååãç §åããéã«ã大æåã¨å°æåã®éããç¡è¦ãããã©ããã®ãã©ã°ã§ãã
RegExp.prototype.multiline-
è¤æ°è¡ã«æ¸¡ã£ã¦æååãæ¤ç´¢ãããã©ããã®ãã©ã°ã§ãã
RegExp.prototype.source-
ãã¿ã¼ã³ã®ããã¹ãã§ãã
RegExp.prototype.sticky-
æ¤ç´¢ãå é åºå® (sticky) ã§ãããã©ããã®ãã©ã°ã§ãã
RegExp.prototype.unicode-
Unicode æ©è½ãæå¹ãã©ããã®ãã©ã°ã§ãã
RegExp.prototype.unicodeSets-
uã¢ã¼ãã¸ã®ã¢ããã°ã¬ã¼ãã§ããvãã©ã°ãæå¹ãã©ããã
ãããã®ããããã£ã¯å RegExp ã¤ã³ã¹ã¿ã³ã¹ã®èªåèªèº«ã§æã¤ããããã£ã§ãã
lastIndex-
次ã®ç §åãéå§ããä½ç½®ã§ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
RegExp.prototype.compile()-
ã¹ã¯ãªããã®å®è¡ä¸ã«æ£è¦è¡¨ç¾ã (å) ã³ã³ãã¤ã«ãã¾ãã
RegExp.prototype.exec()-
æåå弿°ã®ä¸ã§ä¸è´ãããã®ãæ¤ç´¢ãã¾ãã
RegExp.prototype.test()-
æåå弿°ã§ä¸è´ãããã®ããããã©ããæ¤æ»ãã¾ãã
RegExp.prototype.toString()-
æå®ããããªãã¸ã§ã¯ãã表ãæååãè¿ãã¾ãã
Object.prototype.toString()ã¡ã½ããã䏿¸ããã¾ãã RegExp.prototype[Symbol.match]()-
æå®ãããæååã¨ç §åãå®è¡ããç §åçµæãè¿ãã¾ãã
RegExp.prototype[Symbol.matchAll]()-
æååã§æ£è¦è¡¨ç¾ã«ä¸è´ãããã®ããã¹ã¦è¿ãã¾ãã
RegExp.prototype[Symbol.replace]()-
æå®ãããæååã§ä¸è´ããé¨åãæ°ããé¨åæååã§ç½®ãæãã¾ãã
RegExp.prototype[Symbol.search]()-
æå®ãããæååã§ä¸è´ããé¨åãæ¤ç´¢ãããã®æååã§è¦ã¤ãã£ããã¿ã¼ã³ã®ä½ç½®ãè¿ãã¾ãã
RegExp.prototype[Symbol.split]()-
æååãé¨åæååã«åå²ããæå®ãããæååãé åã«åå²ãã¾ãã
ä¾
>æ£è¦è¡¨ç¾ã使ç¨ãããã¼ã¿å½¢å¼ã®å¤æ´
以ä¸ã®ã¹ã¯ãªããã¯ã String.prototype.replace() ã¡ã½ããã使ç¨ãã¦ã å å§ ã®å½¢å¼ã®ååã§ç
§åããå§, å ã®å½¢å¼ã§åºåãã¾ãã
ã¹ã¯ãªããã§ã¯ãç½®æããã¹ãä¸ã§ $1 㨠$2 ã使ç¨ãã¦ããããã対å¿ããæ£è¦è¡¨ç¾ãã¿ã¼ã³ã§ä¸è´ããæ¬å¼§ããã£ããã£ããçµæãæå®ãã¦ãã¾ãã
const re = /(\w+)\s(\w+)/;
const str = "Maria Cruz";
const newStr = str.replace(re, "$2, $1");
console.log(newStr);
ããã¯ã "Cruz, Maria" ã¨è¡¨ç¤ºãã¾ãã
æ£è¦è¡¨ç¾ã使ç¨ãããã¾ãã¾ãªè¡æ«/è¡ã®çµç«¯/æ¹è¡ã§ã®è¡ã®åå²
æ¢å®ã®æ¹è¡æåã¯ããã©ãããã©ã¼ã (UnixãWindows ãªã©) ã«ãã£ã¦ç°ãªãã¾ãããã®ä¾ã§å®è¡ããè¡åå²ã¯ããããããã©ãããã©ã¼ã ã§åä½ãã¾ãã
const text = "Some text\nAnd some more\r\nAnd yet\nThis is the end";
const lines = text.split(/\r?\n/);
console.log(lines); // [ 'Some text', 'And some more', 'And yet', 'This is the end' ]
æ£è¦è¡¨ç¾å ã®ãã¿ã¼ã³ã®é åºãéè¦ã§ãããã¨ã«æ³¨æãã¦ãã ããã
è¤æ°è¡ã§æ£è¦è¡¨ç¾ã使ç¨ãã
ããã©ã«ãã§ã¯ã. æåã¯æ¹è¡ã«ä¸è´ãã¾ãããæ¹è¡ã«ä¸è´ãããã«ã¯ãs ãã©ã°ï¼dotAll ã¢ã¼ãï¼ã使ç¨ãã¾ãã
const s = "Please yes\nmake my day!";
s.match(/yes.*day/);
// null ãè¿ã
s.match(/yes.*day/s);
// Returns ["yes\nmake my day"]
sticky ãã©ã°ä»ãã®æ£è¦è¡¨ç¾ã®ä½¿ç¨
sticky ãã©ã°ã¯ãæ£è¦è¡¨ç¾ã® sticky ç
§åãå®è¡ãããã¨ã示ãã¦ããã対象æååã§ RegExp.prototype.lastIndex ã®ä½ç½®ããç
§åã試ã¿ã¾ãã
const str = "#foo#";
const regex = /foo/y;
regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (sticky ãã©ã°ãããã®ã§ lastIndex ããå§ãã)
regex.lastIndex; // 0 (ç
§åã«å¤±æããå¾ã¯ãªã»ãã)
sticky ãã©ã°ã¨ global ãã©ã°ã®éã
sticky ãã©ã° y ãä»ããã¨ã次ã®ç
§å㯠lastIndex ã®ä½ç½®ã§è¡ãããã®ã«å¯¾ãã global ãã©ã° g ãä»ããã¨ãæ¤ç´¢ã¯ lastIndex ã®ä½ç½®ããå§ãããã¾ãã
const re = /\d/y;
let r;
while ((r = re.exec("123 456"))) {
console.log(r, "AND re.lastIndex", re.lastIndex);
}
// [ '1', index: 0, input: '123 456', groups: undefined ] AND re.lastIndex 1
// [ '2', index: 1, input: '123 456', groups: undefined ] AND re.lastIndex 2
// [ '3', index: 2, input: '123 456', groups: undefined ] AND re.lastIndex 3
// ... ãã¨ã¯ä¸è´ããªã
global ãã©ã° g ãä»ããã¨ã 3 æ¡ã ãã§ãªãã 6 æ¡ãã¹ã¦ã«ä¸è´ãã¾ãã
æ£è¦è¡¨ç¾ã¨ Unicode æå
ä¸ã®è¡¨ã«ãããéãã\w ã \W 㯠ASCII åºæ¬æåã«ã®ã¿ä¸è´ãã¾ããå
·ä½çã«ã¯ a ãã z ãA ãã Z ã 0 ãã 9 ããã³ _ ã§ãã
ããªã«èªãããã©ã¤èªã§ä½¿ããããããªé ASCII æåã¨ç
§åããã«ã¯ \uHHHH å½¢å¼ï¼HHHH ã®é¨å㯠16 é²è¡¨è¨ã® Unicode å¤ï¼ã使ã£ã¦ãã ããã
ãã®ä¾ã¯ãæååå ¨ä½ãã Unicode æååã ããæãåºãæ¹æ³ã示ãã¦ãã¾ãã
const text = "ÐбÑÐ°Ð·ÐµÑ text на ÑÑÑÑком ÑзÑке";
const regex = /[\u0400-\u04ff]+/g;
const match = regex.exec(text);
console.log(match[0]); // 'ÐбÑазеÑ'
console.log(regex.lastIndex); // 7
const match2 = regex.exec(text);
console.log(match2[0]); // 'на' ('text' ã¯åºåããªã)
console.log(regex.lastIndex); // 15
// 以ä¸åæ§
Unicode ããããã£ã¨ã¹ã±ã¼ãæ©è½ã¯ \p{scx=Cyrl} ï¼ãã¹ã¦ã®ããªã«æåã«ä¸è´ï¼ã¾ã㯠\p{L}/u ï¼ãã¹ã¦ã®è¨èªã®æåã«ä¸è´ï¼ã®ããã«ããç°¡æ½ãªè¡¨è¨ãã§ããããã«ãã解決çãå°å
¥ãã¦ãã¾ãã
URL ããã®ãµããã¡ã¤ã³åã®æ½åº
const url = "http://xxx.domain.com";
console.log(/^https?:\/\/(.+?)\./.exec(url)[1]); // 'xxx'
ã¡ã¢: URL ãè§£éããã«ã¯ãæ£è¦è¡¨ç¾ã使ç¨ããããã URL API ã«ããããã©ã¦ã¶ã¼å èµã® URL ãã¼ãµã¼ã使ç¨ãããã¨ããå§ããã¾ãã
åçãªå ¥åããã®æ£è¦è¡¨ç¾ã®æ§ç¯
const breakfasts = ["bacon", "eggs", "oatmeal", "toast", "cereal"];
const order = "Let me get some bacon and eggs, please";
order.match(new RegExp(`\\b(${breakfasts.join("|")})\\b`, "g"));
// ['bacon', 'eggs'] ãè¿ã
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-regexp-regular-expression-objects> |
ãã©ã¦ã¶ã¼ã®äºææ§
Firefox åºæã®æ³¨æäºé
Firefox 34 ãããéæå®åãä¼´ããã£ããã£ã°ã«ã¼ããåä½ã妨ãã¦ããå ´åã«ããã£ããã£ã°ã«ã¼ãã«ä¸è´ããããã¹ãã¯ç©ºæååã§ã¯ãªã undefined ã«ãªãã¾ããã
// Firefox 33 以å
"x".replace(/x(.)?/g, (m, group) => {
console.log(`group: ${JSON.stringify(group)}`);
});
// group: ""
// Firefox 34 以é
"x".replace(/x(.)?/g, (m, group) => {
console.log(`group: ${group}`);
});
// group: undefined
ã¦ã§ãã®äºææ§ã®ãã RegExp.$N ã¯å¼ãç¶ãã undefined ã§ã¯ãªã空æååãè¿ãã¾ã (ãã° 1053944)ã