æ°éè©: *, +, ?, {n}, {n,}, {n,m}
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æ.
æ°éè©ã¯ãã¢ãã ãæå®ããåæ°ç¹°ãè¿ãã¾ããæ°éè©ã¯é©ç¨ããã¢ãã ã®å¾ã«é ç½®ãã¾ãã
æ§æ
// 貪欲
atom?
atom*
atom+
atom{count}
atom{min,}
atom{min,max}
// é貪欲
atom??
atom*?
atom+?
atom{count}?
atom{min,}?
atom{min,max}?
弿°
atom-
åä¸ã®ã¢ãã ã§ãã
count-
éè² ã®æ´æ°ã§ããã¢ãã ãç¹°ãè¿ãããåæ°ã§ãã
min-
éè² ã®æ´æ°ã§ããã¢ãã ãç¹°ãè¿ããã¨ãã§ããæå°åæ°ã§ãã
maxçç¥å¯-
éè² ã®æ´æ°ã§ããã¢ãã ãç¹°ãè¿ããã¨ãã§ããæå¤§åæ°ã§ããçç¥ããå ´åãã¢ãã ã¯å¿ è¦ãªã ãç¹°ãè¿ããã¾ãã
解説
æ°éè©ã¯ã¢ãã ã®å¾ã«ç½®ããããã®ã¢ãã ãä¸å®åæ°ç¹°ãè¿ãã¾ããåç¬ã§ç¾ãããã¨ã¯ããã¾ãããããããã®æ°éè©ã¯ããã¿ã¼ã³ãç¹°ãè¿ãããªããã°ãªããªãæå°æ°ã¨æå¤§æ°ãæå®ãããã¨ãã§ãã¾ãã
| æ°éè© | æå°å¤ | æå¤§å¤ |
|---|---|---|
? |
0 | 1 |
* |
0 | ç¡é大 |
+ |
1 | ç¡é大 |
{count} |
count |
count |
{min,} |
min |
ç¡é大 |
{min,max} |
min |
max |
{count}ã{min,}ã{min,max} ã®æ§æã§ã¯ãæ°å¤ã®å¨ãã«ç©ºç½ãå
¥ãããã¨ã¯ã§ãã¾ãããããããªãã¨ãªãã©ã«ã®ãã¿ã¼ã³ã«ãªãã¾ãã
const re = /a{1, 3}/;
re.test("aa"); // false
re.test("a{1, 3}"); // true
ãã®åä½ã¯ Unicode 対å¿ã¢ã¼ãã§ä¿®æ£ããã䏿¬å¼§ãã¨ã¹ã±ã¼ããªãã§ãªãã©ã«ã«å
¥ãããã¨ãã§ããªããªãã¾ããã{ 㨠} ãã¨ã¹ã±ã¼ããªãã§ãªãã©ã«ã¨ãã¦ä½¿ç¨ã§ããã¨ããã®ã¯ã¦ã§ãã®äºææ§ã®ããã®éæ¨å¥¨æ§æã¨ãã¦ã®ã¿èªãããã¦ãããé ¼ã£ã¦ã¯ããã¾ããã
/a{1, 3}/u; // SyntaxError: Invalid regular expression: Incomplete quantifier
æå°å¤ãæå¤§å¤ãã大ããã¨æ§æã¨ã©ã¼ã«ãªãã¾ãã
/a{3,2}/; // SyntaxError: Invalid regular expression: numbers out of order in {} quantifier
æ°éè©ã«ãã£ã¦ããã£ããã£ã°ã«ã¼ããè¤æ°åç §åããããã¨ãã§ãã¾ãããã®å ´åã®åä½ã«ã¤ãã¦ã¯ããã£ããã£ã°ã«ã¼ãã®ãã¼ã¸ãåç §ãã¦ãã ããã
ä¸è´ãããã¨ã«æååãåãã§ããå¿ è¦ã¯ããã¾ããã
/[ab]*/.exec("aba"); // ['aba']
æ°éè©ã¯æ¢å®ã§ã¯è²ªæ¬²ã§ããã¤ã¾ããæå¤§å¤ã«éããã¾ã§ããããã¯ãã以ä¸ä¸è´ããããã¨ãã§ããªããªãã¾ã§ãå¯è½ãªéãä½åº¦ã§ãç
§åãããã¨ãã¾ããæ°éè©ã®å¾ã« ? ãä»ãããã¨ã§ã貪欲ã§ãªãæ°éè©ã«ãããã¨ãã§ãã¾ãããã®å ´åãæ°éè©ã¯ã§ããéãä¸è´åæ°ãå°ãªãããããã¨ããæ®ãã®ãã¿ã¼ã³ããã®åæ°ã§ä¸è´ããããã¨ãã§ããªããªã£ãå ´åã®ã¿ããã以ä¸ã®åæ°ãç
§åãããã¨ãã¾ãã
/a*/.exec("aaa"); // ['aaa']; å
¥åå
¨ä½ãæ¶è²»ããã
/a*?/.exec("aaa"); // ['']; æåãæ¶è²»ããªãã¦ããä¸è´ãããã¨ã¯å¯è½
/^a*?$/.exec("aaa"); // ['aaa']; æ¶è²»ããæåæ°ãæ¸ãããã¨ã¯ä¸å¯è½ã ããç
§åã«ã¯æåãã
ãã ããããã¤ã³ããã¯ã¹ã§æ£è¦è¡¨ç¾ãæååã¨ä¸è´ããã¨ããã以éã®ã¤ã³ããã¯ã¹ã試ããªããªãã¾ãã
/a*?$/.exec("aaa"); // ['aaa']; ç
§åã¯æåã®æåã§ãã§ã«æåãã¦ããã®ã§ãæ£è¦è¡¨ç¾ã¯ 2 æåç®ã§ç
§åãéå§ãããã¨ãã¾ããã
è²ªæ¬²ãªæ°éè©ã¯ããã以å¤ã®ãã¿ã¼ã³ã«ä¸è´ãããã¨ãä¸å¯è½ãªå ´åãå復忰ãå°ãªããããã¨ããããããã¾ããã
/[ab]+[abc]c/.exec("abbc"); // ['abbc']
ãã®ä¾ã§ã¯ãæåã® [ab]+ ã¯è²ªæ¬²ã« "abb" ã«ä¸è´ãã¾ããã[abc]c ã¯æ®ãã®ãã¿ã¼ã³ ("c") ã«ä¸è´ãããã¨ãã§ããªãã®ã§ãæ°éè©ã¯ "ab" ã ãã«ä¸è´ããããã«ç¸®å°ããã¾ãã
è²ªæ¬²ãªæ°éè©ã¯ãç¡éåã®ç©ºæååã¨ä¸è´ãããã¨ãé¿ãã¾ãã ç
§åããæåæ°ãæå°å¤ã«éãããã®ä½ç½®ã®ã¢ãã ã§æ¶è²»ãããæåããªããªãã¨ã æ°éè©ã¯ç
§åã忢ãã¾ãã ããã /(a*)*/.exec("b") ãç¡éã«ã¼ãã«ãªããªãçç±ã§ãã
è²ªæ¬²ãªæ°éè©ã¯å¯è½ãªéãå¤ãã®åæ°ã®ç
§åããããã¨ãã¾ããä¾ãã°ã/(aa|aabaac|ba)*/.exec("aabaac") 㯠"aabaac" ã®ä»£ããã« "aa" 㨠:ba" ã«ä¸è´ãã¾ãã
æ°éè©ã¯åä¸ã®ã¢ãã ã«é©ç¨ããã¾ããé·ããã¿ã¼ã³ãè«çåãéåãããå ´åã¯ãã°ã«ã¼ãåããå¿ è¦ãããã¾ãã æ°éè©ã¯ã¢ãµã¼ã·ã§ã³ã«ã¯é©ç¨ã§ãã¾ããã
/^*/; // SyntaxError: Invalid regular expression: nothing to repeat
Unicode 対å¿ã¢ã¼ãã§ã¯ãå èªã¿ã¢ãµã¼ã·ã§ã³ã¯éåã§ãã¾ããããã¯ã¦ã§ãã®äºææ§ã®ããã®éæ¨å¥¨æ§æã§ãããé ¼ã£ã¦ã¯ããã¾ããã
/(?=a)?b/.test("b"); // true; å
èªã¿ã 0 åä¸è´
ä¾
>HTML ã¿ã°ã®é¤å»
次ã®ä¾ã¯ãå±±æ¬å¼§ã§å²ã¾ãã HTML ã¿ã°ãé¤å»ãã¾ããæ¶è²»ããæåãå¤ããªããããªãããã« ? ã使ç¨ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã
function stripTags(str) {
return str.replace(/<.+?>/g, "");
}
stripTags("<p><em>lorem</em> <strong>ipsum</strong></p>"); // 'lorem ipsum'
貪欲ãªç
§åã§ãåã广ãå¾ããã¾ãããç¹°ãè¿ããããã¿ã¼ã³ã > ã«ä¸è´ãã¾ããã
function stripTags(str) {
return str.replace(/<[^>]+>/g, "");
}
stripTags("<p><em>lorem</em> <strong>ipsum</strong></p>"); // 'lorem ipsum'
è¦å:
ããã¯ãã¢ã®ããã®ãã®ã§ã屿§å¤ã®ä¸ã« > ãããå ´åã¯æ£ããæ±ãã¾ããã代ããã«é©å㪠HTML ãµãã¿ã¤ã¶ã¼ããã¨ãã° HTML ãµãã¿ã¤ã¶ã¼ API ãªã©ã使ç¨ãã¦ãã ããã
Markdown ã®æ®µè½ã®ä½ç½®ãæå®
Markdown ã§ã¯ã段è½ã¯ 1 ã¤ä»¥ä¸ã®ç©ºç½è¡ã§åºåããã¾ããæ¬¡ã®ä¾ã§ã¯ã2 ã¤ä»¥ä¸ã®æ¹è¡ã¨ç §åãããã¨ã§ãæååå ã®ãã¹ã¦ã®æ®µè½ãæ°ãã¾ãã
function countParagraphs(str) {
return str.match(/(?:\r?\n){2,}/g).length + 1;
}
countParagraphs(`
Paragraph 1
Paragraph 2
Containing some line breaks, but still the same paragraph
Another paragraph
`); // 3
è¦å: ããã¯ãã¢ã®ããã®ãã®ã§ãã³ã¼ããããã¯å ã®æ¹è¡ããè¦åºãã®ãããªä»ã® Markdown ãããã¯è¦ç´ ãå¦çãã¾ããã代ããã«é©å㪠Markdown ãã¼ãµã¼ã使ç¨ãã¦ãã ããã
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # prod-Quantifier> |