Baseline Widely available
[Symbol.match]()
㯠RegExp
ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ã String.prototype.match()
ãã©ã®ããã«åä½ããã®ããæå®ãã¾ããããã«ããããåå¨ãããã©ãããããã®ãªãã¸ã§ã¯ããæ£è¦è¡¨ç¾ã¨ã¿ãªããããã©ããã«ãå½±é¿ãã¾ãã
class RegExp1 extends RegExp {
[Symbol.match](str) {
const result = RegExp.prototype[Symbol.match].call(this, str);
if (result) {
return "VALID";
}
return "INVALID";
}
}
console.log("2012-07-02".match(new RegExp1("([0-9]+)-([0-9]+)-([0-9]+)")));
// Expected output: "VALID"
æ§æ
regexp[Symbol.match](str)
弿°
str
æåå (String
) ã§ãç
§åã®å¯¾è±¡ã¨ãªããã®ã§ãã
é
å (Array
) ã§ãå
容ã¯ã°ãã¼ãã« (g
) ãã©ã°ããããã©ããã§å¤ããã¾ããä¸è´ãããã®ãè¦ã¤ãããªããã° null
ã«ãªãã¾ãã
g
ãã©ã°ã使ç¨ãããå ´åã¯ããã®æ£è¦è¡¨ç¾å
¨ä½ã«ä¸è´ãããã¹ã¦ã®çµæã¨ãªãã¾ããããã£ããã£ã°ã«ã¼ãã¯å«ã¾ãã¾ãããg
ãã©ã°ã使ç¨ãããªãã£ãå ´åã¯ãæåã«ä¸è´ãããã®å
¨ä½ã¨ãé¢é£ãããã£ããã£ã°ã«ã¼ããè¿ããã¾ãããã®å ´åã match()
㯠RegExp.prototype.exec()
ï¼ä¸é¨ã®è¿½å ã®ããããã£ãé
åã§å«ãï¼ã®çµæã¨åãã«ãªãã¾ãããã®ã¡ã½ããã¯ãString.prototype.match()
ã§å
é¨çã«å¼ã³åºããã¾ãã
ãã¨ãã°ã次㮠2 ã¤ã®ä¾ã¯åãçµæãè¿ãã¾ãã
"abc".match(/a/);
/a/[Symbol.match]("abc");
æ£è¦è¡¨ç¾ãã°ãã¼ãã«ï¼g
ãã©ã°ä»ãï¼ã§ããå ´åããã®æ£è¦è¡¨ç¾ã® exec()
ã¡ã½ããã¯ã exec()
ã null
ãè¿ãã¾ã§ç¹°ãè¿ãå¼ã³åºããã¾ããããã§ãªãå ´åã exec()
ã¯ä¸åº¦ã ãå¼ã³åºããããã®çµæã [Symbol.match]()
ã®è¿å¤ã¨ãªãã¾ãã
[Symbol.match]()
㯠exec()
ã null
ãè¿ãã¾ã§å¼ã³åºãç¶ããæå¾ã®ç
§åã«å¤±æããã¨èªåçã«æ£è¦è¡¨ç¾ã® lastIndex
ã 0 ã«ãªã»ãããã¾ããããããæ£è¦è¡¨ç¾ãç²ççã§ãããã®ã®ã°ãã¼ãã«ã§ã¯ãªãå ´åã lastIndex
ã¯ãªã»ããããã¾ããããã®å ´åã match()
ãå¼ã³åºããã³ã«ç°ãªãçµæãè¿ãããããã¾ããã
const re = /[abc]/y;
for (let i = 0; i < 5; i++) {
console.log("abc".match(re), re.lastIndex);
}
// [ 'a' ] 1
// [ 'b' ] 2
// [ 'c' ] 3
// null 0
// [ 'a' ] 1
æ£è¦è¡¨ç¾ãç²ççãã¤ã°ãã¼ãã«ãªå ´åãç²ççãªç
§åãã¤ã¾ã lastIndex
以éã®ç
§åã¯è¡ããã¾ããã
console.log("ab-c".match(/[abc]/gy)); // [ 'a', 'b' ]
ããç¾å¨ã®ç
§åã空æååã§ãã£ãã¨ãã¦ãã lastIndex
ã¯é²ã¿ã¾ããæ£è¦è¡¨ç¾ã Unicode 対å¿ã¢ã¼ãã§ããã°ãUnicode ã®ã³ã¼ããã¤ã³ã 1 ã¤åé²ã¿ã¾ããããã§ãªããã°ã UTF-16 ã³ã¼ãåä½åé²ã¿ã¾ãã
console.log("ð".match(/(?:)/g)); // [ '', '', '' ]
console.log("ð".match(/(?:)/gu)); // [ '', '' ]
ãã®ã¡ã½ãã㯠RegExp
ãµãã¯ã©ã¹å
ã§ç
§åã®åä½ãã«ã¹ã¿ãã¤ãºããããã«åå¨ãã¾ãã
ããã«ã[Symbol.match]()
ããããã£ã¯ãªãã¸ã§ã¯ããæ£è¦è¡¨ç¾ã§ãããã©ããããã§ãã¯ããããã«ä½¿ããã¾ãã
ãã®ã¡ã½ããã¯ãã»ã¨ãã© String.prototype.match()
ã¨åãæ¹æ³ã§ä½¿ç¨ãããã¨ãã§ãã¾ããã this
ã¨å¼æ°ã®ä¸¦ã³é ãç°ãªãã¾ãã
const re = /[0-9]+/g;
const str = "2016-01-02";
const result = re[Symbol.match](str);
console.log(result); // ["2016", "01", "02"]
ãµãã¯ã©ã¹ã§ @@match ã使ç¨
RegExp
ã®ãµãã¯ã©ã¹ã¯ãæ¢å®ã®åä½ãä¿®æ£ããããã« [Symbol.match]()
ã¡ã½ããããªã¼ãã¼ã©ã¤ãã§ãã¾ãã
class MyRegExp extends RegExp {
[Symbol.match](str) {
const result = RegExp.prototype[Symbol.match].call(this, str);
if (!result) return null;
return {
group(n) {
return result[n];
},
};
}
}
const re = new MyRegExp("([0-9]+)-([0-9]+)-([0-9]+)");
const str = "2016-01-02";
const result = str.match(re); // String.prototype.match 㯠re[Symbol.match]() ãå¼ã³åºã
console.log(result.group(1)); // 2016
console.log(result.group(2)); // 01
console.log(result.group(3)); // 02
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4