Webå¼åææ¯æ¢³ç 0x9 JavaScriptï¼0x6ï¼æ£å表达å¼
æ£åè¡¨è¾¾å¼æ¯ç¨äºå¹é å符串ä¸å符ç»åçæ¨¡å¼ãå¨ JavaScriptä¸ï¼æ£å表达å¼ä¹æ¯å¯¹è±¡ãè¿äºæ¨¡å¼è¢«ç¨äº RegExp ç exec å test æ¹æ³, 以å String ç matchãreplaceãsearch å split æ¹æ³ã
å建ä¸ä¸ªæ£å表达å¼
- ä½¿ç¨æ£å表达å¼åé¢é
/*
/pattern/flags
*/
const regex = /ab+c/;
const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
- è°ç¨ RegExp对象çæé 彿°
/*
new RegExp(pattern [, flags])
*/
let regex = new RegExp("ab+c");
let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
ç¼åæ£å表达å¼ç模å¼
ä¸ä¸ªæ£åè¡¨è¾¾å¼æ¨¡å¼æ¯ç±ç®åçåç¬¦æææçï¼æ¯å¦/abc/, æè æ¯ç®ååç¹æ®å符çç»åï¼æ¯å¦ /ab*c/ æ /Chapter (\d+)\.\d*/ãåè ç¨å°äºæ¬å·ï¼å®å¨æ£å表达å¼ä¸å¯ä»¥è¢«ç¨ä½æ¯ä¸ä¸ªè®°å¿è®¾å¤ãè¿ä¸é¨åæ£åæå¹é çå符å°ä¼è¢«è®°ä½ï¼å¨åé¢å¯ä»¥è¢«å©ç¨ã
使ç¨ç®åçæ¨¡å¼
ç®åçæ¨¡å¼æ¯ç±æ¾å°çç´æ¥å¹é æææçãæ¯å¦ï¼/abc/è¿ä¸ªæ¨¡å¼å°±å¹é äºå¨ä¸ä¸ªå符串ä¸ï¼ä» ä» å符 'abc' åæ¶åºç°å¹¶æç §è¿ä¸ªé¡ºåºã
使ç¨ç¹æ®å符
æ£å表达å¼ä¸çç¹æ®å符
ä½¿ç¨æå ¥è¯
任使£å表达å¼çæå ¥è¯é½ä¼ä½¿è¿é¨åå¹é çå¯å符串被记å¿ã
䏿¦è¢«è®°å¿ï¼è¿ä¸ªå¯å符串就å¯ä»¥è¢«è°ç¨äºå ¶å®ç¨éãæ¯å¦ï¼ /Chapter (\d+)\.\d*/ è§£éäºé¢å¤è½¬ä¹çåç¹æ®çå符ï¼å¹¶è¯´æäºè¿é¨åpatternåºè¯¥è¢«è®°å¿ãå®ç²¾ç¡®å°å¹é åé¢è·çä¸ä¸ªä»¥ä¸æ°åå符çå符 'Chapter ' (\d æä¸ºä»»ä½æ°åå符ï¼+ æä¸º1次以ä¸)ï¼è·çä¸ä¸ªå°æ°ç¹ï¼å¨è¿ä¸ªåç¬¦ä¸æ¬èº«ä¹æ¯ä¸ä¸ªç¹æ®å符ï¼å°æ°ç¹åç \ æå³çè¿ä¸ªpatternå¿ é¡»å¯»æ¾åé¢å符 '.')ï¼è·ç任使°åå符0次以ä¸ã (\d æä¸ºæ°ååç¬¦ï¼ * æä¸º0次以ä¸)ãå¦å¤ï¼æå ¥è¯ä¹ç¨æ¥è®°å¿ç¬¬ä¸ä¸ªå¹é çæ°åå符ã
æ¤æ¨¡å¼å¯ä»¥å¹é å符串"Open Chapter 4.3, paragraph 6"ï¼å¹¶ä¸'4'å°ä¼è¢«è®°ä½ãæ¤æ¨¡å¼å¹¶ä¸è½å¹é "Chapter 3 and 4"ï¼å 为å¨è¿ä¸ªå符串ä¸'3'çå颿²¡æç¹å·'.'ã
ä½¿ç¨æ£å表达å¼
æ£å表达å¼å¯ä»¥è¢«ç¨äºRegExpçexecåtestæ¹æ³ä»¥å Stringçmatchãreplaceãsearchåsplitæ¹æ³ã
//使ç¨execæ¹æ³å¨ä¸ä¸ªåç¬¦ä¸²ä¸æ¥æ¾ä¸ä¸ªå¹é
ã
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
//妿ä¸éè¦è®¿é®æ£å表达å¼ç屿§
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
//éè¿ä¸ä¸ªå符串æå»ºæ£å表达å¼
var myRe = new RegExp("d(b+)d", "g");
var myArray = myRe.exec("cdbbdbsbz");
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + myRe.lastIndex);
//The value of lastIndex is 5
å¯ä»¥ä½¿ç¨ä¸ä¸ªæ£å表达å¼å建ä¸ä¸ªæ²¡æåé ç»åéç对象åå§å容å¨ãå¦æè¿æ ·åï¼é£ä¹ï¼æ¯ä¸æ¬¡ä½¿ç¨æ¶é½å¥½æ¯å¨ä½¿ç¨ä¸ä¸ªæ°çæ£å表达å¼ãå 为è¿ä¸ªåå ï¼å¦æä½¿ç¨è¿ä¸ªæªåé ç»ä¸ä¸ªåéçæ£å表达å¼ï¼å°å¨éåä¸è½è®¿é®è¿ä¸ªæ£å表达å¼ç屿§ã
var myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);
//The value of lastIndex is 0
ä½¿ç¨æ¬å·çåå符串å¹é
ä¸ä¸ªæ£åè¡¨è¾¾å¼æ¨¡å¼ä½¿ç¨æ¬å·ï¼å°å¯¼è´ç¸åºçåå¹é 被记ä½ãä¾å¦ï¼/a(b)c /å¯ä»¥å¹é å符串âabcâï¼å¹¶ä¸è®°å¾âbâãåè°è¿äºæ¬å·ä¸å¹é çå串ï¼ä½¿ç¨æ°ç»å ç´ [1],â¦â¦[n]ã
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
// "Smith, John"
éè¿æ å¿è¿è¡é«çº§æç´¢
æ£åè¡¨è¾¾å¼æå个å¯éåæ°è¿è¡å ¨å±åä¸å大å°åæç´¢ãè¿äºåæ°æ¢å¯ä»¥åç¬ä½¿ç¨ä¹å¯ä»¥ä¸èµ·ä½¿ç¨å¨ä»»ä½é¡ºåºåå 嫿£å表达å¼çé¨åä¸ã
//ä½¿ç¨æ å¿çä¸¤ç§æ¹æ³
var re = /pattern/flags;
var re = new RegExp("pattern", "flags");
å®ä¾
æ¹åå符串ç顺åº
// ä¸é¢è¿ä¸ªå§åå符串å
å«äºå¤ä¸ªç©ºæ ¼åå¶è¡¨ç¬¦ï¼
// ä¸å¨å§ååä¹é´å¯è½æå¤ä¸ªç©ºæ ¼åå¶è¡¨ç¬¦ã
var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
var output = ["---------- Original String\n", names + "\n"];
// åå¤ä¸¤ä¸ªæ¨¡å¼çæ£åè¡¨è¾¾å¼æ¾è¿æ°ç»éã
// åå²è¯¥å符串æ¾è¿æ°ç»éã
// å¹é
模å¼ï¼å¹é
ä¸ä¸ªåå·åç´§æ¥å
¶ååææå¯è½åºç°çè¿ç»çä¸å¯è§ç¬¦å·ã
var pattern = /\s*;\s*/;
// æéè¿ä¸è¿°å¹é
模å¼åå²çå符串æ¾è¿ä¸ä¸ªå«ånameListçæ°ç»éé¢ã
var nameList = names.split(pattern);
// æ°å»ºä¸ä¸ªå¹é
模å¼ï¼å¹é
ä¸ä¸ªæå¤ä¸ªè¿ç»çä¸å¯è§å符åå
¶ååç´§æ¥çç±
// ä¸ä¸ªæå¤ä¸ªè¿ç»çåºæ¬æä¸åæ¯è¡¨ä¸çåæ¯ãæ°ååä¸åçº¿ç»æçå符串
// ç¨ä¸å¯¹åæ¬å·æ¥æè·è¯¥æ¨¡å¼ä¸çä¸é¨åå¹é
ç»æã
// æè·çç»æç¨åä¼ç¨å°ã
pattern = /(\w+)\s+(\w+)/;
// æ°å»ºä¸ä¸ªæ°ç» bySurnameList ç¨æ¥ä¸´æ¶åæ¾æ£å¨å¤ççååã
var bySurnameList = [];
// è¾åº nameList çå
ç´ å¹¶ä¸æ nameList éçåå
// ç¨éå·æ¥ç©ºæ ¼çæ¨¡å¼æå§åååå²å¼æ¥ç¶ååæ¾è¿æ°ç» bySurnameList ä¸ã
//
// ä¸é¢çè¿ä¸ªæ¿æ¢æ¹æ³æ nameList éçå
ç´ ç¨ $2, $1 çæ¨¡å¼
// ï¼ç¬¬äºä¸ªæè·çå¹é
ç»æç´§æ¥çä¸ä¸ªéå·ä¸ä¸ªç©ºæ ¼ç¶åç´§æ¥ç第ä¸ä¸ªæè·çå¹é
ç»æï¼æ¿æ¢äº
// åé $1 ååé $2 æ¯ä¸é¢ææè·çå¹é
ç»æã
output.push("---------- After Split by Regular Expression");
var i, len;
for (i = 0, len = nameList.length; i < len; i++){
output.push(nameList[i]);
bySurnameList[i] = nameList[i].replace(pattern, "$2, $1");
}
// è¾åºæ°çæ°ç»
output.push("---------- Names Reversed");
for (i = 0, len = bySurnameList.length; i < len; i++){
output.push(bySurnameList[i]);
}
// æ ¹æ®å§æ¥æåºï¼ç¶åè¾åºæåºåçæ°ç»ã
bySurnameList.sort();
output.push("---------- Sorted");
for (i = 0, len = bySurnameList.length; i < len; i++){
output.push(bySurnameList[i]);
}
output.push("---------- End");
console.log(output.join("\n"));
ç¨ç¹æ®å符æ£éªè¾å ¥
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
var re = /(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/;
function testInfo(phoneInput) {
var OK = re.exec(phoneInput.value);
if (!OK)
window.alert(phoneInput.value + ' isn\'t a phone number with area code!');
else
window.alert('Thanks, your phone number is ' + OK[0]);
}
</script>
</head>
<body>
<p>Enter your phone number (with area code) and then click "Check".
<br>The expected format is like ###-###-####.</p>
<form action="#">
<input id="phone"><button onclick="testInfo(document.getElementById('phone'));">Check</button>
</form>
</body>
</html>