我正在搜索一个集文本,以获得多个值,这些值稍后将存储在数据库中。
我正在使用RegExp,并与正式的文档和帮助一起工作,使代码成为两个单独的while循环。问题是,是否有可能将它们合并成一个,添加越来越多的正则表达式,或者它们是否需要各自的for-循环。
const regex = /PREPARED FOR([^]*?)RESERVATION/g;
const regex2 = /AIRLINE RESERVATION CODE (.*)/g;
const str = `30 OCT 2017 04 NOV 2017
Distance (in Miles):500
Stop(s): 0
Distance (in Miles):500
Stop(s):0
TRIP TO KRAKOW, POLAND
PREPARED FOR
DOE/JANE MRS
APPLESEED/JOHN MR
RESERVATION CODE UVWXYZ
AIRLINE RESERVATION CODE DING67 (OS)
AIRLINE RESERVATION CODE HDY75S (OS)`;
let m;
let x;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
console.log(m[1])
}
while ((x = regex2.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (x.index === regex2.lastIndex) {
regex2.lastIndex++;
}
console.log(x[1])
}
console.log("We're done here")现在,这是非常好的工作,但我将添加更多的过滤器和搜索到它,这意味着我可能得到总共8-9,而循环,这可能会减慢进程,或是低效的。
发布于 2018-01-09 14:09:49
您不需要一个循环,您可以使用字符串的match方法,但是为了只获得匹配的组,您必须使用一个查找(javascript的regex实现不支持),但是,它确实支持提前查找,所以基本上,您可以反转它,反转所有匹配,并过滤掉空字符串来获取预订代码。由于名称只有一个匹配项,因此也不需要循环,假设始终有匹配项,所以只需使用exec并将结果从末尾弹出。
const str = `30 OCT 2017 04 NOV 2017
Distance (in Miles):500
Stop(s): 0
Distance (in Miles):500
Stop(s):0
TRIP TO KRAKOW, POLAND
PREPARED FOR
DOE/JANE MRS
APPLESEED/JOHN MR
RESERVATION CODE UVWXYZ
AIRLINE RESERVATION CODE DING67 (OS)
AIRLINE RESERVATION CODE HDY75S (OS)`;
var r1 = / (.*)(?= EDOC NOITAVRESER ENILRIA)/g,
r2 = /PREPARED FOR([^]*?)RESERVATION/g;
const rev = s=>s.split('').reverse().join('').trim();
let x = r2.exec(str).pop();
let m = rev(str).match(r1).map(rev).filter(w=>w.length);
console.log(x);
console.log(m);https://codereview.stackexchange.com/questions/184653
复制相似问题