如何使用 JavaScript 正则表达式提取字符串?
Posted
技术标签:
【中文标题】如何使用 JavaScript 正则表达式提取字符串?【英文标题】:How to extract a string using JavaScript Regex? 【发布时间】:2010-12-15 00:07:13 【问题描述】:我正在尝试使用 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);
【问题讨论】:
【参考方案1】:function extractSummary(iCalContent)
var rx = /\nSUMMARY:(.*)\n/g;
var arr = rx.exec(iCalContent);
return arr[1];
您需要进行以下更改:
将*
放在括号内为
上面建议。否则你的匹配
组将只包含一个
特点。
去掉^
和$
。使用 global 选项,它们匹配整个字符串的开头和结尾,而不是行的开头和结尾。而是匹配显式换行符。
我想你想要匹配组(什么是
括号内)而不是
完整的阵列? arr[0]
是
完整匹配 ("\nSUMMARY:..."
) 和
下一个索引包含该组
匹配。
String.match(regexp) 是 应该返回一个数组 火柴。在我的浏览器中它没有(Mac 上的 Safari 只返回完整的 匹配,而不是组),但是 Regexp.exec(string) 有效。
【讨论】:
我会将它与@barkmadley 的|| [null, null]
结合起来,因为如果匹配失败,arr
将为空,arr[1]
将引发异常【参考方案2】:
你需要使用m
flag:
多行;将开始和结束字符(^ 和 $)视为有效 多行(即匹配每行的开头或结尾 (由 \n 或 \r 分隔),不仅是开头或结尾 整个输入字符串)
同时将*
放在正确的位置:
"DATE:20091201T220000\r\nSUMMARY:Dad's birthday".match(/^SUMMARY\:(.*)$/gm);
//------------------------------------------------------------------^ ^
//-----------------------------------------------------------------------|
【讨论】:
【参考方案3】:你的正则表达式很可能是
/\nSUMMARY:(.*)$/g
我喜欢使用的一个有用的小技巧是在匹配数组时默认分配。
var arr = iCalContent.match(/\nSUMMARY:(.*)$/g) || [""]; //could also use null for empty value
return arr[0];
这样你在使用arr
时就不会遇到烦人的类型错误
【讨论】:
match
如果没有 match 则返回 null【参考方案4】:
(.*)
而不是 (.)*
将是一个开始。后者只会捕获该行的最后一个字符。
另外,不需要转义:
。
【讨论】:
【参考方案5】:此代码有效:
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
祝你好运。
【讨论】:
【参考方案6】:你应该使用这个:
var arr = iCalContent.match(/^SUMMARY\:(.)*$/g);
return(arr[0]);
【讨论】:
【参考方案7】:这就是您可以使用 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);
【讨论】:
以上是关于如何使用 JavaScript 正则表达式提取字符串?的主要内容,如果未能解决你的问题,请参考以下文章