Baseline Widely available *
RegExp
ãªãã¸ã§ã¯ãã¯ãããã¹ãããã¿ã¼ã³ã¨ç
§åããããã«ä½¿ç¨ãã¾ãã
æ£è¦è¡¨ç¾ã®å ¥éè¨äºã¯ã JavaScript ã¬ã¤ãã®æ£è¦è¡¨ç¾ããèªã¿ãã ãããæ£è¦è¡¨ç¾ã®æ§æã®è©³ç´°æ å ±ã«ã¤ãã¦ã¯ãæ£è¦è¡¨ç¾ãªãã¡ã¬ã³ã¹ãåç §ãã¦ãã ããã
解説 ãªãã©ã«è¨æ³ã¨ã³ã³ã¹ãã©ã¯ã¿ã¼RegExp
ãªãã¸ã§ã¯ããçæããã«ã¯ 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\rThis is the end";
const lines = text.split(/\r\n|\r|\n/);
console.log(lines); // [ 'Some text', 'And some more', 'And yet', 'This is the end' ]
æ£è¦è¡¨ç¾å ã®ãã¿ã¼ã³ã®é åºãéè¦ã§ãããã¨ã«æ³¨æãã¦ãã ããã
è¤æ°è¡ã§æ£è¦è¡¨ç¾ã使ç¨ããconst s = "Please yes\nmake my day!";
s.match(/yes.*day/);
// null ãè¿ã
s.match(/yes[^]*day/);
// 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 æ¡ãã¹ã¦ã«ä¸è´ãã¾ãã
ä¸ã®è¡¨ã«ãããéãã\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
ï¼ãã¹ã¦ã®è¨èªã®æåã«ä¸è´ï¼ã®ããã«ããç°¡æ½ãªè¡¨è¨ãã§ããããã«ãã解決çãå°å
¥ãã¦ãã¾ãã
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'] ãè¿ã
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ 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)ã
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