|
| Udtrække kommentarer via reg-expression Fra : Bjørn Nesby |
Dato : 22-03-03 16:55 |
|
Hej,
jeg er ved at lave et script som skal kunne udtrække kommentarer fra HTML
dokumenter. Der findes to slags kommentarer, en "text" og en "media"
kommentar, som jeg skelner imellem når jeg formatterer teksten.
Mit problem med scriptet er, at jeg ikke kan finde ud af hvordan man
genbruger et match fra den første reg-ex ($3) i den næste reg-ex...Jeg skal
bruge reg-ex nummer to til at lave *seperate* replace funktioner på alle
matches af "text" og "media" så de får forskelligt udseende
på forhånd tak,
Bjørn Næsby Nielsen
Her et scriptet (Jscript) - jeg har indrammet reg-ex #2
----------------------------------------------------------------
function inflateComments(textString) {
this.scope = new Array()
this.id = new Array()
// this expression extracts comments between "<!-- n2bot" and "-->"
var re = /(\<!\-\-\sn2bot)(\s*)(.+)(\s*)(\-\-\>)/gi
var out = "", last = 0, arr, i = 0;
//loop through the instances and save them
while ((arr = re.exec(textString)) != null) {
// --------------------------------------------------------------------
// 2nd regular expression: match against each result of first match ???
// --------------------------------------------------------------------
var re2 = /(\^$3)/gi
// split into "value pairs"
var str2=(RegExp.$3).split(" ")
// loop through value pairs...
for(j=0;j<str2.length;j++){
// split values...
var str=str2[j].split("=")
// check values...
for(k=0;k<str.length;k++){
switch(str[k]){
case "scope" : this.scope[i]=str[k+1]; break;
case "id" : this.id[i]=str[k+1]; break;
case "author" : this.author[i]=str[k+1]; break;
case "version" : this.version[i]=str[k+1]; break;
}
}
}
switch(this.scope[i]){
case "\"text\"" : out = textString.replace(re2, "Scope:text<!-- n2bot
$3-->"); break;
case "\"media\"" : out = textString.replace(re2, "Scope:media<!-- n2bot
$3-->");break;
}
i++
}
Response.Write(out)
}
----------------------------------h-------------------
Her er HTML til test af script
-----------------------------------------------------------------
<html>
<head>
<title>inflate comments</title>
</head>
<body bgcolor="#FF00FF">
<table border="1" cellpadding="0" cellspacing="0" width="100%"
bordercolor="#00FFFF">
<tr>
<td width="10%"><!-- n2bot scope="text" id="207" --> </td>
<td width="10%"><!-- n2bot scope="media" id="207" --> </td>
<td width="10%"> </td>
<td width="10%"> </td>
<td width="10%"> </td>
<td width="10%"> </td>
<td width="10%"> </td>
<td width="10%"> </td>
<td width="10%"> </td>
<td width="10%"> </td>
</tr>
</table>
</body>
</html>
| |
Bjørn Nesby (24-03-2003)
| Kommentar Fra : Bjørn Nesby |
Dato : 24-03-03 14:39 |
|
Jeg har selv fundet en løsning (jeg bruger istedet seperate reg-ex) - MEN
jeg kunne godt tænke mig at vide om der var nogle som lå inde med
information på hvordan man skelner mellem syntaks for expression m.
constructor (altså new RegExp()), og så expression uden constructor
(literal).
mvh
Bjørn Næsby Nielsen
"Bjørn Nesby" <120010333572@post.tele.dk> skrev i en meddelelse
news:3e7c8864$0$153$edfadb0f@dread15.news.tele.dk...
> Hej,
>
> jeg er ved at lave et script som skal kunne udtrække kommentarer fra HTML
> dokumenter. Der findes to slags kommentarer, en "text" og en "media"
> kommentar, som jeg skelner imellem når jeg formatterer teksten.
>
> Mit problem med scriptet er, at jeg ikke kan finde ud af hvordan man
> genbruger et match fra den første reg-ex ($3) i den næste reg-ex...Jeg
skal
> bruge reg-ex nummer to til at lave *seperate* replace funktioner på alle
> matches af "text" og "media" så de får forskelligt udseende
>
> på forhånd tak,
> Bjørn Næsby Nielsen
>
>
> Her et scriptet (Jscript) - jeg har indrammet reg-ex #2
> ----------------------------------------------------------------
>
> function inflateComments(textString) {
>
> this.scope = new Array()
> this.id = new Array()
>
> // this expression extracts comments between "<!-- n2bot" and "-->"
> var re = /(\<!\-\-\sn2bot)(\s*)(.+)(\s*)(\-\-\>)/gi
>
> var out = "", last = 0, arr, i = 0;
> //loop through the instances and save them
> while ((arr = re.exec(textString)) != null) {
>
> // --------------------------------------------------------------------
> // 2nd regular expression: match against each result of first match ???
> // --------------------------------------------------------------------
> var re2 = /(\^$3)/gi
>
> // split into "value pairs"
> var str2=(RegExp.$3).split(" ")
>
> // loop through value pairs...
> for(j=0;j<str2.length;j++){
> // split values...
> var str=str2[j].split("=")
> // check values...
> for(k=0;k<str.length;k++){
> switch(str[k]){
> case "scope" : this.scope[i]=str[k+1]; break;
> case "id" : this.id[i]=str[k+1]; break;
> case "author" : this.author[i]=str[k+1]; break;
> case "version" : this.version[i]=str[k+1]; break;
> }
> }
> }
> switch(this.scope[i]){
> case "\"text\"" : out = textString.replace(re2, "Scope:text<!-- n2bot
> $3-->"); break;
> case "\"media\"" : out = textString.replace(re2, "Scope:media<!--
n2bot
> $3-->");break;
> }
> i++
> }
> Response.Write(out)
> }
>
> ----------------------------------h-------------------
> Her er HTML til test af script
> -----------------------------------------------------------------
> <html>
>
> <head>
> <title>inflate comments</title>
> </head>
>
> <body bgcolor="#FF00FF">
>
> <table border="1" cellpadding="0" cellspacing="0" width="100%"
> bordercolor="#00FFFF">
> <tr>
> <td width="10%"><!-- n2bot scope="text" id="207" --> </td>
> <td width="10%"><!-- n2bot scope="media" id="207" --> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> <td width="10%"> </td>
> </tr>
> </table>
>
> </body>
>
> </html>
>
>
>
>
>
>
>
| |
|
|