如何使用 JavaScriptRegex 提取字符串?

我试图用 JavaScript 正则表达式从一个文件中提取一个子字符串:

DATE:20091201T220000
SUMMARY:Dad's birthday

我想提取的字段是“摘要”,方法如下:

extractSummary : function(iCalContent) {
/*
input : iCal file content
return : Event summary
*/
var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
return(arr);
}
341417 次浏览

(.*)而不是 (.)*将是一个开始。后者将只捕获行中的最后一个字符。

而且,没有必要逃避 :

function extractSummary(iCalContent) {
var rx = /\nSUMMARY:(.*)\n/g;
var arr = rx.exec(iCalContent);
return arr[1];
}

你需要这些改变:

  • *放在括号内 以上建议。否则你的匹配 组将只包含一个 字符

  • 去掉 ^$。使用全局选项,它们匹配整个字符串的开始和结束,而不匹配行的开始和结束。而是使用显式的换行符进行匹配。

  • 我想你想要的匹配组(什么是 在括号内)而不是 完整的数组? arr[0]是 完全匹配("\nSUMMARY:...")和 下一个索引包含组 火柴

  • Match (regexp)是 方法返回一个数组 在我的浏览器中它没有(苹果电脑上的 Safari 只返回完整的 匹配,而不是群体) ,但是 Exec (string)工作。

您的正则表达式最有可能是

/\nSUMMARY:(.*)$/g

我喜欢使用的一个有用的小技巧是在匹配时默认使用数组。

var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value
return arr[0];

这样,当您使用 arr时就不会出现恼人的类型错误

这就是用 javascript 解析 iCal 文件的方法

    function calParse(str) {


function parse() {
var obj = {};
while(str.length) {
var p = str.shift().split(":");
var k = p.shift(), p = p.join();
switch(k) {
case "BEGIN":
obj[p] = parse();
break;
case "END":
return obj;
default:
obj[k] = p;
}
}
return obj;
}
str = str.replace(/\n /g, " ").split("\n");
return parse().VCALENDAR;
}


example =
'BEGIN:VCALENDAR\n'+
'VERSION:2.0\n'+
'PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n'+
'BEGIN:VEVENT\n'+
'DTSTART:19970714T170000Z\n'+
'DTEND:19970715T035959Z\n'+
'SUMMARY:Bastille Day Party\n'+
'END:VEVENT\n'+
'END:VCALENDAR\n'




cal = calParse(example);
alert(cal.VEVENT.SUMMARY);

你需要使用 m 旗帜:

多行; 将开始字符和结束字符(^ 和 $)视为工作字符 覆盖多行(例如,匹配每行的开头或结尾 (由 n 或 r 分隔) ,不仅仅是开始或结束 整个输入字符串)

还要把 *放在正确的位置:

"DATE:20091201T220000\r\nSUMMARY:Dad's birthday".match(/^SUMMARY\:(.*)$/gm);
//------------------------------------------------------------------^    ^
//-----------------------------------------------------------------------|

这个代码是有效的:

let str = "governance[string_i_want]";
let res = str.match(/[^governance\[](.*)[^\]]/g);
console.log(res);

Res 将等于“ string _ i _ want”。但是,在这个示例中 res 仍然是一个数组,所以不要将 res 视为字符串。

通过对我不想要的字符进行分组,使用[ ^ string ] ,并对括号之间的内容进行匹配,代码提取出我想要的字符串!

你可以在这里试试: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_match_regexp

祝你好运。

你应该用这个:

var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
return(arr[0]);