å èªã¿ã¢ãµã¼ã·ã§ã³: (?=...), (?!...)
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æ.
å èªã¿ã¢ãµã¼ã·ã§ã³ã®ãå èªã¿ãã¨ã¯ããã以éã®å ¥åãæå®ããããã¿ã¼ã³ã«ç §åãããã¨ãã¾ãããå ¥åãæ¶è²»ãããã¨ã¯ããã¾ãããç §åã«æåããå ´åãå ¥åã®ç¾å¨ã®ä½ç½®ã¯ãã®ã¾ã¾ã§ãã
æ§æ
(?=pattern)
(?!pattern)
弿°
解説
æ£è¦è¡¨ç¾ã¯ä¸è¬ã«å·¦ããå³ã«ç §åãã¾ãããããå èªã¿ããã³å¾èªã¿ã¢ãµã¼ã·ã§ã³ããã®ããã«å¼ã°ããçç±ã§ããå èªã¿ã¢ãµã¼ã·ã§ã³ã¯å³ã«ãããã®ãå¾èªã¿ã¢ãµã¼ã·ã§ã³ã¯å·¦ã«ãããã®ã表ãã¾ãã
(?=pattern) ã¢ãµã¼ã·ã§ã³ãæåããããã«ã¯ãpattern ãç¾å¨ã®ä½ç½®ä»¥éã®ããã¹ãã¨ä¸è´ããªããã°ãªãã¾ããããç¾å¨ã®ä½ç½®ã¯å¤åãã¾ããã(?!pattern) å½¢å¼ã¯ã¢ãµã¼ã·ã§ã³ãå¦å®ãã¾ããpattern ãç¾å¨ã®ä½ç½®ã§ä¸è´ããªãå ´åã«æåãã¾ãã
pattern ã«ã¯ãã£ããã£ã°ã«ã¼ããå«ãããã¨ãã§ãã¾ãããã®å ´åã®åä½ã«ã¤ãã¦ã¯ããã£ããã£ã°ã«ã¼ãã®ãã¼ã¸ãã覧ãã ããã
ä»ã®æ£è¦è¡¨ç¾æ¼ç®åã¨ã¯ç°ãªããå
èªã¿ã¸ã®ããã¯ãã©ãã¯ã¯ããã¾ããããã®åä½ã¯ Perl ããç¶æ¿ããã¦ãã¾ããããã¯ãpattern ããã£ããã£ã°ã«ã¼ããå«ã¿ãå
èªã¿ã«ç¶ããã¿ã¼ã³ããããã®ãã£ããã£ã¸ã®å¾æ¹åç
§ãå«ãå ´åã«ã®ã¿åé¡ã«ãªãã¾ããä¾ãã°ã次ã®ããã«ãªãã¾ãã
/(?=(a+))a*b\1/.exec("baabac"); // ['aba', 'a']
// Not ['aaba', 'a']
ä¸è¨ã®ãã¿ã¼ã³ã®ç §åã¯ä»¥ä¸ã®ããã«è¡ããã¾ãã
(a+)ã¯"baabac"ã®æåã®"a"ã®åã«æåããéåè©ã¯è²ªæ¬²ãªã®ã§"aa"ãææããã¾ããa*bã¯"baabac"ã®"aab"ã«ä¸è´ãã¾ãã\1ã¯ç¶ãæååã«ä¸è´ãã¾ããããã㯠2 ã¤ã®"a"ãå¿ è¦ã§ããã1 ã¤ããå©ç¨ã§ããªãããã§ããç §åã¯ããã¯ãã©ãã¯ãã¾ãããå èªã¿ã«ã¯å ¥ããªãã®ã§ããã£ããã£ã°ã«ã¼ãã 1 ã¤ã®"a"ã«ç¸®å°ãããã¨ã¯ã§ããããã®ç¹ã§ç §åã¯å¤±æãã¾ããexec()ã¯æ¬¡ã®ä½ç½®ãã¤ã¾ã 2 çªç®ã®"a"ã®åã§ç §åãå試è¡ãã¾ããä»åº¦ã¯ãå èªã¿ã"a"ã«ä¸è´ããa*bã"ab"ã«ä¸è´ãã¾ãã徿¹åç §1ã¯ãã£ããã£ããã"a"ã«ä¸è´ããç §åã¯æåãã¾ãã
ããæ£è¦è¡¨ç¾ãå
èªã¿ãããã¯ãã©ãã¯ãã¦ãããã§è¡ããã鏿ãä¿®æ£ãããã¨ãã§ããã°ãç
§åã¯æé 3 ã§ (a+) ãæåã® "a" ã«ä¸è´ãï¼æåã® 2 ã¤ã® "a" ã®ä»£ããã«ï¼ãa*b ã "aab" ã«ä¸è´
ãããã¨ã§ã次ã®å
¥åä½ç½®ãå試è¡ãããã¨ãªãæåããã§ãããã
å¦å®å
èªã¿ã«ããã£ããã£ã°ã«ã¼ããå
¥ãããã¨ãã§ãã¾ããã徿¹åç
§ãæå³ãæã¤ã®ã¯ pattern å
ã ãã§ããç
§åãç¶ããã¨ãå¿
ç¶çã« pattern ã¯ä¸è´ããªããªãããã§ãï¼ããã§ãªããã°ã¢ãµã¼ã·ã§ã³ã¯å¤±æãã¾ãï¼ããã®æå³ã¯ pattern ã®å¤ã§ã¯ãå¦å®å
èªã¿ã®ãã£ããã£ã°ã«ã¼ãã¸ã®å¾æ¹åç
§ã¯å¸¸ã«æåããã¨ãããã¨ã§ããä¾ãã°ã次ã®ããã«ãªãã¾ãã
/(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac"); // ['baaabaac', 'ba', undefined, 'abaac']
ä¸è¨ã®ãã¿ã¼ã³ã®ç §åã¯ä»¥ä¸ã®ããã«è¡ããã¾ãã
(.*?)ãã¿ã¼ã³ã¯è²ªæ¬²ã§ã¯ãªãã®ã§ãä½ãç §åããªããã¨ããå§ã¾ãã¾ããããããæ¬¡ã®æåã¯aã§ãå ¥åä¸ã®"b"ã«ã¯ä¸è´ãã¾ããã(.*?)ãã¿ã¼ã³ã¯"b"ã«ä¸è´ããã®ã§ããã¿ã¼ã³ä¸ã®aã¯"baaabaac"ã®æåã®"a"ã«ä¸è´ãã¾ãã- ãã
(a+)ã"aa"ã«ä¸è´ãããªãã°ã(a+)b2cã¯"aabaac"ã«ä¸è´ãã¾ãããã®ãããã¢ãµã¼ã·ã§ã³ã¯å¤±æãããããã£ã¼ã¯å¾éãã¾ãã (.*?)ãã¿ã¼ã³ ã¯"ba"ã«ä¸è´ããã®ã§ããã¿ã¼ã³ä¸ã®aã¯"baaabaac"ã® 2 ã¤ç®ã®"a"ã«ä¸è´ãã¾ãã- ãã®ä½ç½®ã§ã¯ãå
èªã¿ã¯ç
§åã«å¤±æãã¾ãã ãªããªããæ®ãã®å
¥åã¯ãä»»æã®æ°ã®
"a"ã¨"b", åãæ°ã®"a"ã¨cãã¨ãããã¿ã¼ã³ã«ç¶ããªãããã§ããããã«ãããã¢ãµã¼ã·ã§ã³ã¯æåãã¾ãã - ããããã¢ãµã¼ã·ã§ã³å
ã§ã¯ä½ãä¸è´ããªãã£ãã®ã§ã徿¹åç
§
\2ã«ã¯å¤ããªãã空æååã«ä¸è´ãã¾ãããã®ãããå ¥åã®æ®ãã®é¨åã¯æå¾ã®(.*)ã«ãã£ã¦æ¶è²»ããã¾ãã
é常ãã¢ãµã¼ã·ã§ã³ã¯éåã§ãã¾ãããããããUnicode é対å¿ã¢ã¼ãã«ããã¦ã¯ãå èªã¿ã¢ãµã¼ã·ã§ã³ã¯éåãããã¨ãã§ãã¾ããããã¯ã¦ã§ãã®äºææ§ã®ããã®éæ¨å¥¨æ§æã¨ãã¦ã®ã¿èªãããã¦ãããé ¼ã£ã¦ã¯ããã¾ããã
/(?=a)?b/.test("b"); // true; the lookahead is matched 0 time
ä¾
>æ¶è²»ããã«æååãç §å
ä¸è´ããæååã®å¾ã«ä½ããç¶ãã¦ãããã¨ããçµæã¨ãã¦è¿ããã«æ¤è¨¼ããã®ã便å©ãªãã¨ãããã¾ããæ¬¡ã®ä¾ã¯ãã«ã³ããããªãªããç¶ãæååã«ä¸è´ãã¾ãããå¥èªç¹ã¯çµæã«å«ã¾ãã¾ããã
function getFirstSubsentence(str) {
return /^.*?(?=[,.])/.exec(str)?.[0];
}
getFirstSubsentence("Hello, world!"); // "Hello"
getFirstSubsentence("Thank you."); // "Thank you"
èå³ã®ããé¨åä¸è´ããã£ããã£ãããã¨ã§ãåæ§ã®å¹æãå¾ããã¾ãã
ãã¿ã¼ã³ã®å·®éåããã³äº¤å·®éå
å èªã¿ãç¨ãããã¨ã§ãæååãç°ãªããã¿ã¼ã³ã§è¤æ°åç §åãããã¨ãã§ãã¾ããããã«ãããå·®éåï¼X ã§ããã Y ã§ã¯ãªãï¼ã交差éåï¼X 㨠Y ã®ä¸¡æ¹ã§ããï¼ã¨ãã£ãè¤éãªé¢ä¿ãçºçããããã¨ãã§ãã¾ãã
以ä¸ã®ä¾ã¯ãèå¥åã§ãããäºç´èªã§ãªããã®ã«ä¸è´ãã¾ãï¼ããã§ã¯ç°¡æ½ã«ããããã« 3 ã¤ã®äºç´èªã®ã¿ã示ãã¦ãã¾ãããã®è«çåã«ã¯ãããã«äºç´èªãå ãããã¨ãã§ãã¾ãã[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]* ã¨ããæ§æã¯ãè¨èªä¾åã®èå¥åæååã®éåãæ£ç¢ºã«è¨è¿°ãã¦ãã¾ãã詳ããã¯ãèå¥åã«ã¤ãã¦ã¯å奿æ³ãã\p ã¨ã¹ã±ã¼ãã«ã¤ãã¦ã¯ Unicode æåã¯ã©ã¹ã¨ã¹ã±ã¼ããåç
§ãã¦ãã ããã
function isValidIdentifierName(str) {
const re =
/^(?!(?:break|case|catch)$)[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
return re.test(str);
}
isValidIdentifierName("break"); // false
isValidIdentifierName("foo"); // true
isValidIdentifierName("cases"); // true
次ã®ä¾ã¯ãASCIIã§ããã¤èå¥åé¨åã¨ãã¦ä½¿ç¨ã§ããæååã«ä¸è´ãã¾ãã
function isASCIIIDPart(char) {
return /^(?=\p{ASCII}$)\p{ID_Start}$/u.test(char);
}
isASCIIIDPart("a"); // true
isASCIIIDPart("α"); // false
isASCIIIDPart(":"); // false
æåæ°ã®æéãªäº¤å·®éåãå·®éåãæ±ãå ´åã¯ãv ãã©ã°ã使ç¨ãã¦æå¹ã«ããæåéåäº¤å·®æ§æã使ç¨ããã¨ããã§ãããã
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # prod-Assertion> |