æ£è¦è¡¨ç¾ãæ±ã2ã¤ã®æ¹æ³ãããã¾ãã
- ã¾ãæ£è¦è¡¨ç¾ã¯çµã¿è¾¼ã¿ã® RegExp ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã§ãããå¤ãã®ã¡ã½ãããæä¾ãã¾ãã
- ããã«å ãã¦ãæååã®ä¸ã«æ£è¦è¡¨ç¾ã§åä½ããã¡ã½ãããããã¾ãã
æ§é ã¯å°ãã´ãã£ã´ãã£ãã¦ããã®ã§ãæåã«ã¡ã½ãããåå¥ã«èå¯ãããã®å¾ã§å ±éã®ã¿ã¹ã¯ã«å¯¾ãã¦å®éã®ã¬ã·ããèãã¦è¡ãã¾ãã
str.search(reg)
æã
ã¯ãã§ã«ãã®ã¡ã½ãããè¦ã¾ãããããã¯æåã«ãããããä½ç½®ããè¦ã¤ãããªãå ´å㯠-1 ãè¿ãã¾ãã:
let str = "A drop of ink may make a million think";
alert( str.search( /a/i ) ); // 0 (å
é ã®ä½ç½®)
éè¦ãªå¶é: search ã¯å¸¸ã«æåã®ããããæ¢ãã¾ãã
search ã使ç¨ãã¦æ¬¡ã®ä½ç½®ãè¦ã¤ãããã¨ã¯ã§ãã¾ãã(ãã®ããã®æ§æã¯ããã¾ãã)ãããããããã§ããå¥ã®ã¡ã½ãããããã¾ãã
str.match(reg), âgâ ãã©ã°ãªã
ã¡ã½ãã str.match 㯠g ãã©ã°ã«å¿ãã¦æ¯ãèããç°ãªãã¾ãã
ã¾ã㯠g ããªãå ´åãè¦ã¦ã¿ã¾ãããã
str.match(reg) ã¯æåã®ãããã®ã¿ãæ¢ãã¾ã
çµæã¯ãããããããã®ã¨è¿½å ããããã£ãæã¤é åã§ã:
indexâ æååå ã§ã®ãããããä½ç½®inputâ 対象æåå
ä¾:
let str = "Fame is the thirst of youth";
let result = str.match( /fame/i );
alert( result[0] ); // Fame (ããããããã®)
alert( result.index ); // 0 (ã¼ãä½ç½®)
alert( result.input ); // "Fame is the thirst of youth" (対象æåå)
é åã¯1ã¤ä»¥ä¸ã®è¦ç´ ãæã£ã¦ããå ´åãããã¾ãã
ãã¿ã¼ã³ã®ä¸é¨ã丸æ¬å¼§ (...) ã§åºåããã¦ããå ´åãããã¯é
åã®å¥ã®è¦ç´ ã«ãªãã¾ã
ä¾:
let str = "JavaScript is a programming language";
let result = str.match( /JAVA(SCRIPT)/i );
alert( result[0] ); // JavaScript (ãããå
¨ä½)
alert( result[1] ); // script (æ¬å¼§ã«å¯¾å¿ãããããããé¨å)
alert( result.index ); // 0
alert( result.input ); // JavaScript is a programming language
i ãã©ã°ã«ãããæ¤ç´¢ã¯å¤§æåå°æååºå¥ãªãã§ãããã®ãããJavaScript ãè¦ã¤ãã¾ããSCRIPT ã«å¯¾å¿ãããããã®ä¸é¨ã¯å¥ã®é
åã¢ã¤ãã ã«ãªãã¾ãã
å¾ã»ã©ããã£ãã¿ã¼ ãã£ããã£ã°ã«ã¼ã ã§æ¬å¼§ã«ã¤ãã¦æ»ãã¾ããæ¬å¼§ã¯æ¤ç´¢ã¨ç½®æã«æé©ã§ãã
str.match(reg) âgâ ãã©ã°ä»ã
"g" ãã©ã°ãããã¨ãstr.match ã¯ãã¹ã¦ã®ãããã®é
åãè¿ãã¾ãããã®é
åã«ã¯è¿½å ã®ããããã£ã¯ãªããæ¬å¼§ã¯è¦ç´ ã使ãã¾ããã
ä¾:
let str = "HO-Ho-ho!";
let result = str.match( /ho/ig );
alert( result ); // HO, Ho, ho (ãã¹ã¦ã®ããã, 大æåå°æåã®åºå¥ãªã)
æ¬å¼§ãããå ´åãå¤ããã¾ããããã£ã¦ã¿ã¾ããã:
let str = "HO-Ho-ho!";
let result = str.match( /h(o)/ig );
alert( result ); // HO, Ho, ho
ãããã£ã¦ãg ãã©ã°ãããã¨ãresult ã¯ã·ã³ãã«ãªãããã®é
åã«ãªãã¾ãã追å ã®ããããã£ã¯ããã¾ããã
ãããããä½ç½®ã«é¢ããæ å ±ãåå¾ããããæ¬å¼§ã使ãããå ´åã¯ãä¸ã§èª¬æãã RegExp#exec ã¡ã½ããã使ç¨ããå¿ è¦ãããã¾ãã
match ã®å¼ã³åºã㯠null ãè¿ãã¾ã注æãã¦ãã ãããéè¦ã§ããããããããã®ããªãã£ãå ´åãçµæã¯ç©ºã®é
åã§ã¯ãªã null ã§ãã
次ã®ãããªè½ã¨ãç©´ãé¿ããããã«å¿ã«çãã¦ããã¦ãã ãã:
let str = "Hey-hey-hey!";
alert( str.match(/ho/gi).length ); // error! there's no length of null
str.split(regexp|substr, limit)
æ£è¦è¡¨ç¾ã¾ãã¯é¨åæååãåºåãæåã¨ãã¦ä½¿ç¨ãã¦æååãåå²ãã¾ãã
ç§ãã¡ã¯ãã§ã«æååã§ split ã使ãã¾ããããã®ããã«ãªãã¾ã:
alert('12-34-56'.split('-')) // [12, 34, 56]
ããããæ£è¦è¡¨ç¾ã渡ããã¨ãå¯è½ã§ãã:
alert('12-34-56'.split(/-/)) // [12, 34, 56]
str.replace(str|reg, str|func)
æååã®æ¤ç´¢ãç½®æã®ããã®ã¹ã¤ã¹ã»ã¢ã¼ãã¼ãã¤ã(ä¸è½ãªãã®)ã§ãã
æãç°¡åãªä½¿ãæ¹ã¯ â ãã®ããã«é¨åæååã®æ¤ç´¢ã¨ç½®æã§ã:
// replace a dash by a colon
alert('12-34-56'.replace("-", ":")) // 12:34-56
replace ã®ç¬¬ä¸å¼æ°ãæååã®å ´åãæåã®ãããã®ã¿ãæ¢ãã¾ãã
ãã¹ã¦ã®ããã·ã¥ "-" ãè¦ã¤ããããã«ã¯ãæåå "-" ã§ã¯ãªããg ãã©ã°ãæã¤æ£è¦è¡¨ç¾ /-/g ã使ç¨ããå¿
è¦ãããã¾ãã:
// ãã¹ã¦ã®ããã·ã¥ãã³ãã³ã«ç½®æ
alert( '12-34-56'.replace( /-/g, ":" ) ) // 12:34:56
2ã¤ç®ã®å¼æ°ã¯ç½®ææååã§ãã
ããã§ã¯ç¹å¥ãªæåãå©ç¨ã§ãã¾ã:
| è¨å· | æ¿å ¥ |
|---|---|
$$ |
"$" |
$& |
ãããå ¨ä½ |
$` |
ãããã®åã®æååã®ä¸é¨ |
$' |
a part of the string after the match |
$n |
n ã1-2æ¡ã®æ°åãªãã°ãå·¦ããå³ã«æ°ãã¦nçªç®ã®ã«ãã³ã®å
容ãæå³ãã¾ã |
ä¾ãã°ã$& ã使ã£ã¦ãã¹ã¦ã® "John" ã®ã¨ã³ããªã "Mr.John" ã«ç½®ãæãã¾ãããã:
let str = "John Doe, John Smith and John Bull.";
// å John ã«å¯¾ã㦠- Mr. 㨠John ã«ç½®æ
alert(str.replace(/John/g, 'Mr.$&'));
// "Mr.John Doe, Mr.John Smith and Mr.John Bull.";
æ¬å¼§ã¯æ¬¡ã®ããã« $1, $2 ãªã©ã¨ä¸ç·ã«ãã使ç¨ããã¾ãã:
let str = "John Smith";
alert(str.replace(/(John) (Smith)/, '$2, $1')) // Smith, John
"è³¢ã"ãªç½®æãå¿ è¦ãªç¶æ³ã§ã¯ã2ã¤ç®ã®å¼æ°ã¯é¢æ°ã«ãããã¨ãã§ãã¾ã
ããããã®ãããã«å¯¾ãã¦å¼ã³åºããããã®çµæãç½®æã¨ãã¦æ¿å ¥ããã¾ãã
ä¾:
let i = 0;
// å "ho" ã颿°ã®çµæã«ç½®æãã¾ã
alert("HO-Ho-ho".replace(/ho/gi, function() {
return ++i;
})); // 1-2-3
ä¸ã®ä¾ã§ã¯ã颿°ã¯åã«æ¯åæ¬¡ã®æ°å¤ãè¿ãã¦ãã¾ãããé常ã¯çµæã¯ããããããã®ã«åºã¥ãããã®ã«ãªãã¾ãã
颿°ã¯å¼æ° func(str, p1, p2, ..., pn, offset, s) ã§å¼ã°ãã¾ã:
strâ ããããããã®,p1, p2, ..., pnâ æ¬å¼§ã®å 容(ããå ´å),offsetâ ãããããä½ç½®,sâ å ã®æåå.
æ£è¦è¡¨ç¾ã«æ¬å¼§ããªãå ´åã颿°ã¯å¸¸ã«3ã¤ã®å¼æ°ã§ã: func(str, offset, s)ã
ãããã使ã£ã¦ãããããããã®ã«ã¤ãã¦ã®å®å ¨ãªæ å ±ã表示ãã¦ã¿ã¾ãããã:
// ãã¹ã¦ã®ãããã表示ãç½®ãæãã
function replacer(str, offset, s) {
alert(`Found ${str} at position ${offset} in string ${s}`);
return str.toLowerCase();
}
let result = "HO-Ho-ho".replace(/ho/gi, replacer);
alert( 'Result: ' + result ); // Result: ho-ho-ho
// ããããã®ãããã表示:
// Found HO at position 0 in string HO-Ho-ho
// Found Ho at position 3 in string HO-Ho-ho
// Found ho at position 6 in string HO-Ho-ho
ä¸ã®ä¾ã§ã¯2ã¤ã®æ¬å¼§ãããã¾ãããªã®ã§ãreplacer ã¯5ã¤ã®å¼æ°ã§å¼ã°ãã¾ã: str ã¯å®å
¨ãªããã, æ¬¡ã«æ¬å¼§, ãã㦠offset 㨠s ã§ã:
function replacer(str, name, surname, offset, s) {
// name ã¯æåã®æ¬å¼§ã§ãsurname ã¯2ã¤ç®ã§ã
return surname + ", " + name;
}
let str = "John Smith";
alert(str.replace(/(John) (Smith)/, replacer)) // Smith, John
颿°ã使ç¨ããã¨ãããããããã®ã«é¢ãããã¹ã¦ã®æ å ±ãåå¾ããå¤é¨å¤æ°ã«ã¢ã¯ã»ã¹ãããã¹ã¦ãè¡ããã¨ãã§ããããã究極çãªç½®ææ©è½ãå¾ããã¾ãã
regexp.test(str)
regexp èªèº«ãå¼ã³åºãã§ãã RegExp ã¯ã©ã¹ã®ã¡ã½ãããè¦ã¦ã¿ã¾ãããã
test ã¡ã½ããã¯ããããããæ¢ããè¦ã¤ãã£ããã©ããã§ true/false ãè¿ãã¾ãã
ãªã®ã§ãåºæ¬çã«ã¯ str.search(reg) != -1 ã¨åãã§ããä¾ãã°:
let str = "I love JavaScript";
// ãããã®2ã¤ã®ãã¹ãã¯åããã¨ããã¾ã
alert( /love/i.test(str) ); // true
alert( str.search(/love/i) != -1 ); // true
è¦ã¤ãããªãå ´åã®ä¾ã§ã:
let str = "Bla-bla-bla";
alert( /love/i.test(str) ); // false
alert( str.search(/love/i) != -1 ); // false
regexp.exec(str)
ãã§ã«ãããã®æ¤ç´¢ã¡ã½ããã¯è¦ã¾ãã:
searchâ ãããããä½ç½®ãæ¢ãmatchâgãã©ã°ããªããã°æ¬å¼§ã®ãã®ã¨ä¸ç·ã«æåã«ããããããã®ãè¿ãã¾ãmatchâgãã©ã°ãããã° â ãã¹ã¦ã®ããããããã®ãè¿ãã¾ããæ¬å¼§ã®ãã®ã¯å«ã¾ãã¾ããã
regexp.exec ã¡ã½ããã¯å°ã使ãã«ããã§ãããæ¬å¼§ã®ãã®ãä½ç½®ã¨ä¸ç·ã«ãã¹ã¦ã®ããããæ¤ç´¢ãããã¨ãã§ãã¾ãã
ããã¯æ£è¦è¡¨ç¾ã« g ãã©ã°ããããã©ããã§åä½ãç°ãªãã¾ãã
gãã©ã°ããªãå ´åãregexp.exec(str)ã¯æåã®ããããè¿ãã¾ããããã¯ã¾ãã«str.match(reg)ã¨åãã§ããgãããå ´åãregexp.exec(str)ã¯æåã®ããããè¿ãããã®å¾regexp.lastIndexããããã£ã«ãã®å¾ãã®ä½ç½®ã è¨æ¶ãã¾ã ãæ¬¡ã®å¼ã³åºãã¯regexp.lastIndexããæ¤ç´¢ãå§ã¾ããæ¬¡ã®ããããè¿ãã¾ãããããã以ä¸ããããããã®ããªãå ´åãregexp.execã¯nullãè¿ããregexp.lastIndexã¯0ã«ã»ããããã¾ãã
è¦ã¦åããããã«ãg ãã©ã°ããªãå ´å㯠str.match ã¨ã¾ã£ããåãã§ããããããã®ã¡ã½ããã¯æ°ãããã¨ã¯ä½ãããã¾ããã
ããããg ãã©ã°ã¯ãããã®ä½ç½®ã¨æ¬å¼§ã®ã°ã«ã¼ããå«ãããã¹ã¦ã®ããããå¾ãäºãã§ãã¾ãã
ããã¯ã次㮠regexp.exec å¼ã³åºããã©ã®ããã«1ã¤ãã¤ããããè¿ããã®ä¾ã§ã:
let str = "A lot about JavaScript at https://javascript.info";
let regexp = /JAVA(SCRIPT)/ig;
// æåã®ããããæ¢ã
let matchOne = regexp.exec(str);
alert( matchOne[0] ); // JavaScript
alert( matchOne[1] ); // script
alert( matchOne.index ); // 12 (ãããããä½ç½®)
alert( matchOne.input ); // str ã¨åã
alert( regexp.lastIndex ); // 22 (ãããå¾ã®ä½ç½®)
// 2ã¤ç®ã®ããããæ¢ã
let matchTwo = regexp.exec(str); // regexp.lastIndex ããæ¤ç´¢ãç¶ãã
alert( matchTwo[0] ); // javascript
alert( matchTwo[1] ); // script
alert( matchTwo.index ); // 34 (ãããããä½ç½®)
alert( matchTwo.input ); // str ã¨åã
alert( regexp.lastIndex ); // 44 (ãããå¾ã®ä½ç½®)
// 3ã¤ç®ã®ããããæ¢ã
let matchThree = regexp.exec(str); // regexp.lastIndex ããæ¤ç´¢ãç¶ãã
alert( matchThree ); // null (ãããããªã)
alert( regexp.lastIndex ); // 0 (ãªã»ãã)
ã覧ã®éããå regexp.exec å¼ã³åºã㯠âå®å
¨ãªãã©ã¼ããã(æ¬å¼§ã®é
åãindex ã¨ã㦠input ãããã㣠)â ã§ããããè¿ãã¾ãã
regexp.exec ã®ä¸»ãªã¦ã¼ã¹ã±ã¼ã¹ã¯ã«ã¼ãå
ã§ãã¹ã¦ã®ããããè¦ã¤ãããã¨ã§ãã:
let str = 'A lot about JavaScript at https://javascript.info';
let regexp = /javascript/ig;
let result;
while (result = regexp.exec(str)) {
alert( `Found ${result[0]} at ${result.index}` );
}
ã«ã¼ã㯠regexp.exec ã âãã以ä¸ããããããã®ã¯ãªãâ ãæå³ãã null ãè¿ãã¾ã§ç¶ãã¾ãã
lastIndex ãæåã§è¨å®ãããã¨ã§ãregexp.exec ãæå®ä½ç½®ããæ¤ç´¢ãéå§ããããå¼·å¶ãããã¨ãã§ãã¾ãã :
let str = 'A lot about JavaScript at https://javascript.info';
let regexp = /javascript/ig;
regexp.lastIndex = 30;
alert( regexp.exec(str).index ); // 34, æ¤ç´¢ã¯ 30 ã®ä½ç½®ããéå§
âyâ ãã©ã°
y ãã©ã°ã¯ãregexp.lastIndex ããããã£ã§æå®ãããä½ç½®ã§æ£ç¢ºã«ä¸è´ãããã®ãè¦ã¤ããããã«ãã¾ãã
ã¤ã¾ããéå¸¸ã¯æååå
¨ä½ã§æ¤ç´¢ãè¡ããã¾ã: /javascript/ ã¯æååã®ãã¹ã¦ã®å ´æã§ âjavascriptâ ãæ¢ãã¾ãã
ããããæ£è¦è¡¨ç¾ã y ãã©ã°ãæã£ã¦ããã¨ãregexp.lastIndex ã§æå®ãããä½ç½®(ããã©ã«ãã§ã¯ 0 )ã§ã®ã¿ããããããã®ãæ¢ãã¾ãã
ä¾:
let str = "I love JavaScript!";
let reg = /javascript/iy;
alert( reg.lastIndex ); // 0 (default)
alert( str.match(reg) ); // null, ä½ç½® 0 ã§ã¯è¦ã¤ããã¾ãã
reg.lastIndex = 7;
alert( str.match(reg) ); // JavaScript (æ£ããã§ã, ãã®æåã¯ä½ç½® 7 ã§ã)
// ãã以å¤ã® reg.lastIndex ã®å ´å㯠null ã§ã
æ£è¦è¡¨ç¾ /javascript/iy 㯠reg.lastIndex=7 ãè¨å®ããå ´åã«ã®ã¿è¦ã¤ããã¾ãããªããªããy ãã©ã°ã«ãããã¨ã³ã¸ã³ã¯ reg.lastIndex ã®ä½ç½®ããã®æååå
ã®åä¸ã®å ´æã§ã®ã¿è¦ã¤ãããã¨ããããã§ãã
ã§ãä½ã®æå³ãããã®ã§ãããï¼ã©ãã§é©ç¨ããã°ããã§ããããï¼
çç±ã¯ããã©ã¼ãã³ã¹ã§ãã
y ãã©ã°ã¯ããã¹ãã âèªã¿è¾¼ãã§â ã¡ã¢ãªå
ã®æ§ææ§é ãæ§ç¯ããããããããã¢ã¯ã·ã§ã³ãå®è¡ãããããå¿
è¦ã®ããããã°ã©ã ã«ããã¦ããã¼ãµã¼ã¨ãã¦æé©ã§ãããã®ããã«ãããã¹ãã«æ²¿ã£ã¦é²ã¿ãæ£è¦è¡¨ç¾ãé©ç¨ãã¦æ¬¡ã«ä½ããããã確èªãã¾ãã: æååãªã®ããæ°å¤ãªã®ãããã¨ãå¥ã®ãªã«ããï¼
yãã©ã°ã¯ä¸ããããä½ç½®ã«æ£ç¢ºã«æ£è¦è¡¨ç¾ï¼ãããã¯ãããã®ããã¤ãã1ã¤ãã¤ï¼ãé©ç¨ãããã¨ãå¯è½ã«ããããã«ä½ãããããçè§£ããã¨ãããã¹ãã調ã¹ã段éã«é²ããã¨ãã§ãã¾ãã
ãã©ã°ããªãã¨ãæ£è¦è¡¨ç¾ã®ã¨ã³ã¸ã³ã¯å¸¸ã«ããã¹ãã®çµããã¾ã§æ¤ç´¢ãè¡ãã¾ããããã¯ããã¹ãã巨大ãªå ´åã¯ç¹ã«æéããããã¾ããçµæããã¼ãµã¼ãé常ã«é
ããªãã¾ããy ãã©ã°ã¯ãã®ãããªã¨ãã«è¯ããã®ã§ãã
ãµããªãã¬ã·ã
å®éã®ã¿ã¹ã¯ã§ä½¿ããã¨ãèãã¦åããã¨ã¡ã½ãããçè§£ãããããªãã¾ãã
- æåã®ãããã®ã¿ãæ¤ç´¢ãã:
-
- æåã®ãããã®ä½ç½®ãè¦ã¤ãã â
str.search(reg)
- æåã®ãããã®ä½ç½®ãè¦ã¤ãã â
- å®å
¨ãªããã(ããããããã®ãä½ç½®ãå
ã®æåå)ãè¦ã¤ãã â
str.match(reg) - ããããããã®ãããããã§ã㯠â
regexp.test(str) - æå®ä½ç½®ããããããè¦ã¤ãã â
regexp.exec(str),regexp.lastIndexã«ä½ç½®ãè¨å®ãã¾ã
- ãã¹ã¦ã®ããããæ¤ç´¢ãã:
-
- ãããããé
å â
str.match(reg),regã¯gãã©ã°ãæã¤æ£è¦è¡¨ç¾ã
- ãããããé
å â
- ããããã«ã¤ãã¦å®å
¨ãªæ
å ±ãæã¤ãã¹ã¦ã®ããããåå¾ â ã«ã¼ãä¸ã§
gãã©ã°ãæã¤regexp.exec(str)
- æ¤ç´¢ãã¦ç½®æãã:
-
- å¥ã®æååã¾ãã¯é¢æ°ã®çµæã§ç½®ãæãã â
str.replace(reg, str|func)
- å¥ã®æååã¾ãã¯é¢æ°ã®çµæã§ç½®ãæãã â
- æååãåå²ãã:
-
str.split(str|reg)
ã¾ããæ¬¡ã®2ã¤ã®ãã©ã°ã説æãã¾ãã:
- ãã¹ã¦ã®ããããè¦ã¤ãã
gãã©ã°(ã°ãã¼ãã«æ¤ç´¢), - ããã¹ãå
ã§æ£ç¢ºã«æå®ãããä½ç½®ãæ¤ç´¢ããã
yãã©ã°
ããã§ã¡ã½ãããç¥ããæ£è¦è¡¨ç¾ã使ããããã«ãªãã¾ããããããç§ãã¡ã¯æ£è¦è¡¨ç¾ã®æ§æãå¦ã¶å¿ è¦ãããã¾ããæ¬¡ã«é²ã¿ã¾ãããã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã