24-6 ������������������������

¦b WSH ¤]¥i¥H¨Ï¥Î³q¥Îªí¥Üªk¡A¦¹¤è¦¡¥i¥HÅý§Ú­Ì«Ü§Ö¦a¦b¤j¶q¤å¦r¤¤¶¡§ä¨ì§Ú­Ì©Ò­nªº¸ê°T¡C¤U­±³o­Ó½d¨Ò¡A§Ú­Ì§ä¥X¤@­Óºô­¶ªº¼ÐÃD¡G

­ì©lÀÉ¡]regExp01.js¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
// ¨Ï¥Î³q¥Îªí¥Üªk§ì¥X¤@­Óºô­¶ªº¼ÐÃD

// Ū¨úµwºÐ¤¤ªººô­¶
localFile="test.htm"
fso = new ActiveXObject("Scripting.FileSystemObject");
forReading=1, forWriting=2;
fid=fso.OpenTextFile(localFile, forReading);
contents=fid.ReadAll();
fid.Close();
//WScript.Echo(content);

// °õ¦æ³q¥Î¹Bºâ¦¡
myRegExp = /<title>(.*)<\/title>/i;
title = myRegExp.exec(contents);

// Åã¥Üµ²ªG
WScript.Echo("ºô­¶¼ÐÃD = " + title[1]);
WScript.Echo("ºô­¶¼ÐÃD = " + RegExp.$1);

¦¹µ{¦¡½X·|­«±q test.htm §ä¥X¦¹ºô­¶ªº¼ÐÃD¡A¦L¥Xµ²ªG¦p¤U¡G

ºô­¶¼ÐÃD = °ê¥ß²MµØ¤j¾Ç¸ê°T¤uµ{¾Ç¨t ºô­¶¼ÐÃD = °ê¥ß²MµØ¤j¾Ç¸ê°T¤uµ{¾Ç¨t ¦b¤W­z½d¨Ò¤¤¡Atitle[1] ©M RegExp.$1 Àx¦s¬Û¦Pªºµ²ªG¡C¥H¦P¼Ëªº¤è¦¡¡A§Ú­Ì¤]¥i¥H§ä¥X¤@­Ó¥H JScript ¬°¥Dªº WSH Àɮתº²Ä¤@¦Cµù¸Ñ¡A¦p¤U¡G

­ì©lÀÉ¡]regExp02.js¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
// §ì¥X WSH µ{¦¡½X¡]JScript¡^ªº²Ä¤@µù¸Ñ¦C

// Ū¨ú¦¹ÀÉ®×
localFile=WScript.ScriptFullName;
fso = new ActiveXObject("Scripting.FileSystemObject");
forReading=1, forWriting=2;
fid=fso.OpenTextFile(localFile, forReading);
contents=fid.ReadAll();
fid.Close();
//WScript.Echo(content);

// °õ¦æ³q¥Î¹Bºâ¦¡
myRegExp = /\s*\/\/\s*(.*)/;
firstCommentLine = myRegExp.exec(contents);

// ¦L¥Xµ²ªG
WScript.Echo("²Ä¤@µù¸Ñ¦C = " + firstCommentLine[1]);

¦L¥Xµ²ªG¬O¡G

²Ä¤@µù¸Ñ¦C = §ì¥X WSH µ{¦¡½X¡]JScript¡^ªº²Ä¤@µù¸Ñ¦C §Q¥Î¬Û¦Pªº¤è¦¡¡A§Ú­Ì¥i¥H¹ï½d¨Ò¥Ø¿ý»s§@¤@­Ó index.asp ªºÀɮסA¥i¥H§Y®É¦a±N¨C¤@­Ó js Àɮתº²Ä¤@¦Cµù¸Ñ¦C¦L¥X¨Ó¡A§Î¦¨¤@­¶¹ï WSH ªº©Ò¦³ JScript ½d¨Òªº¦Cªí©M²³æ»¡©ú¡A¦p¤U¡G

Example¡]index.asp¡^¡G

¤W­z½d¨Òªº­ì©lÀɦp¤U¡G

­ì©lÀÉ¡]index.asp¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
<%@language=JScript%>
<% title=Request.ServerVariables("SCRIPT_NAME") %>

<%
function getFirstComment(fileName){
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var fid=fso.OpenTextFile(fileName, 1);
	var line=fid.ReadLine();
	fid.Close();
	
	var pattern = /\s*\/\/\s*(.*)$/;
	var abc = pattern.exec(line);
	if (abc==null)
		return("");
	else
		return(RegExp.$1);	// ©Î¬O¡ureturn(abc[1]);¡v¥ç¥i
}

// List files in a given directory with a given extension
function fileList(directory, extension){
	fso = new ActiveXObject("Scripting.FileSystemObject");
	fd = fso.GetFolder(Server.MapPath(directory));
	fc = new Enumerator(fd.Files);
	fileNames=new Array();
	var i=0;
	for (; !fc.atEnd(); fc.moveNext()){
		fileName=fc.item()+"";
		items=fileName.split(".");
		ext=items[items.length-1];	// Get file extension
		if (arguments.length==2)
			if ((ext.toUpperCase()==extension.toUpperCase())||(ext.toLowerCase()==extension.toLowerCase()))
				fileNames[i++]=fileName;
		if (arguments.length==1)
			fileNames[i++]=fileName;
	}
	return(fileNames.sort());
}
%>
<html>
<head>
	<title><%=title%></title>
	<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=big5">
	<meta HTTP-EQUIV="Expires" CONTENT="0">
	<style>
		td {font-family: "¼Ð·¢Åé", "helvetica,arial", "Tahoma"}
		A:link {text-decoration: none}
		A:hover {text-decoration: underline}
	</style>
</head>

<body background="/jang/graphics/background/yellow.gif">
<font face="¼Ð·¢Åé">
<h2 align=center><%=title%></h2>
<hr>

<table border=1 align=center>
<tr>
<th>ÀɮצWºÙ<th>»¡©ú<th>Àɮפj¤p¡]Bytes¡^<th>³Ì«á­×§ï®É¶¡
<%
files=fileList(".", "js");
fso = new ActiveXObject("Scripting.FileSystemObject");
for (i=0; i<files.length; i++){
	f = fso.GetFile(files[i]);
	Response.write("<tr>");
	Response.write("<td><a href=\"" + f.Name + "\">" + f.Name + "</a></td>");
	Response.write("<td>" + getFirstComment(files[i]) + "&nbsp;</td>");
	Response.write("<td>" + f.Size + "</td>");
	Response.write("<td>" + f.DateLastModified + "</td>");
}
%>
</table>

<hr>

<script language="JavaScript">
document.write("Last updated on " + document.lastModified + ".")
</script>

<a href="/jang/sandbox/asp/lib/editfile.asp?FileName=<%=Request.ServerVariables("PATH_INFO")%>"><img align=right border=0 src="/jang/graphics/invisible.gif"></a>
</font>
</body>
</html>

§Ú­Ì¤]¥i¥H°w¹ï¤@¬q HTML ªº­ì©l½X¡A¶i¦æ³sµ²ºô§}©M³sµ²¤å¦rªº©â¨ú¡G

­ì©lÀÉ¡]linkExtraction01.js¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
// ±q¤@¬q¤å¦r¤¤¡A©â¨ú³sµ²¤å¦r»P¬ÛÃöºô§}

content="<a href=\"url1\">text1</a> and <a href=\"url2\">text2</a> and \r\n<a href=\"url3\">text3</a>";
pattern=/<A(.*?)<\/A>/gi;
found=content.match(pattern);
pattern2=/<\s*A\s+HREF\s*=\s*"?(.*?)"?\s*>(.*?)<\s*\/\s*A\s*>/i;
for (i=0; i<found.length; i++){
	pattern2.exec(found[i]);
	WScript.Echo(found[i]+" ===> URL="+RegExp.$1+", TEXT="+RegExp.$2);
}

Åã¥Üµ²ªG¦p¤U¡G

<a href="url1">text1</a> ===> URL=url1, TEXT=text1 <a href="url2">text2</a> ===> URL=url2, TEXT=text2 <a href="url3">text3</a> ===> URL=url3, TEXT=text3 §Ú­Ì¤]¥i¥H°w¹ï¤@­Óºô­¶ test.htm ¨Ó©â¨ú³sµ²ºô§}©M³sµ²¤å¦r¡G

­ì©lÀÉ¡]linkExtraction02.js¡^¡G¡]¦Ç¦â°Ï°ì«ö¨â¤U§Y¥i«þ¨©¡^
// ±q¤@­ÓÀɮפ¤¡A©â¨ú³sµ²¤å¦r»P¬ÛÃöºô§}¡]¥\¯à¤£§¹¥þ¡A¥i¦A§ï¶i¡I¡^

fileName="test.htm";
fso = new ActiveXObject("Scripting.FileSystemObject");
fid=fso.OpenTextFile(fileName, 1);
content=fid.ReadAll();
fid.Close();

pattern=/<A(.*?)<\/A>/gi;
found=content.match(pattern);
pattern2=/<\s*A\s+HREF\s*=\s*"?(.*?)"?\s*>(.*?)<\s*\/\s*A\s*>/i;
for (i=0; i<found.length; i++){
	pattern2.exec(found[i]);
	WScript.Echo(found[i]+" ===> URL="+RegExp.$1+", TEXT="+RegExp.$2);
}

Åã¥Üµ²ªG¦p¤U¡G

<a href="2001_need_teacher_c.doc" target="_blank">(¤¤)</a> ===> URL=2001_need_teacher_c.doc" target="_blank, TEXT=(¤¤) <a href="2001_need_teacher_e.doc" target="_blank">(­^)</a> ===> URL=2001_need_teacher_e.doc" target="_blank, TEXT=(­^) <a href="/intro.html"><img src="/icon/csbuild_8.jpg" lowsrc="/icon/csbuild_7b.jpg" border=0 alt="²MµØ¸ê°T²¥v"></a> ===> URL=/intro.html, TEXT=<img src="/icon/csbuild_8.jpg" lowsrc="/icon/csbuild_7b.jpg" border=0 alt="²MµØ¸ê°T²¥v"> <a href="Grading_report.doc">¨t©Ò¦Û§ÚµûŲ³ø§i</a> ===> URL=Grading_report.doc, TEXT=¨t©Ò¦Û§ÚµûŲ³ø§i <a href="mailto:www@cs.nthu.edu.tw">·N ¨£ »P «ü ±Ð</a> ===> URL=mailto:www@cs.nthu.edu.tw, TEXT=·N ¨£ »P «ü ±Ð <a href="/webteam">»s §@ ¤p ²Õ</a> ===> URL=/webteam, TEXT=»s §@ ¤p ²Õ <a href="special.html"><font face="Arials">¾Ç ³N ¨ô ¶V & ªÀ °Ï Ãö Ãh</a> ===> URL=special.html, TEXT=<font face="Arials">¾Ç ³N ¨ô ¶V & ªÀ °Ï Ãö Ãh

Hint
¦b¹Á¸Õ¤W­z½d¨Ò®É¡A½Ð°O±o­n±Nµ{¦¡½X linkExtraction02.js ©Mºô­¶ÀÉ®× test.htm ©ñ¦b¦P¤@­Ó¥Ø¿ý¡C


JScript µ{¦¡³]­p»PÀ³¥Î¡G¥Î©ó³æ¾÷ªº WSH Àô¹Ò