所以,我有一个字符串,当该行包含我正在搜索的单词时,我想返回整行。 我有这段代码:
var subtitle = '4'+
'00:00:24.067 --> 00:00:35.924'+
'Hi, how are you?'+
'Doing fine?'+
''+
'5'+
'00:00:35.926 --> 00:00:47.264'+
'I\'m doing the best I can.'+
'And you?';
var myRe = /^.* you.*$/ig;
var myArray;
while ((myArray = myRe.exec(legenda)) !== null) {
var msg = 'Found ' + myArray[0] + '. ';
msg += 'Next match starts at ' + myRe.lastIndex;
console.log(msg);
}
在上面的代码中,我试图返回包含单词“you”的两行,预期的输出将是:“嗨,你好吗?”和“你呢?”但我得到了字幕变量的所有内容。 但是,如果我检查我的正则表达式here,我得到了所需的输出。
是的,有人可以帮助我吗?这是我第一次使用正则表达式,感觉有点迷失。答案 0 :(得分:3)
首先,这不是一个多行字符串,你只需要连接多行中的字符串,但字符串本身就是一行。然后,当尝试将多行字符串与正则表达式匹配时,您必须使用m
flag
请检查此问题:Creating multiline strings in JavaScript
var subtitle = '4\n'+
'00:00:24.067 --> 00:00:35.924\n'+
'Hi, how are you?\n'+
'Doing fine?\n'+
'\n'+
'5\n'+
'00:00:35.926 --> 00:00:47.264\n'+
'I\'m doing the best I can.\n'+
'And you?\n';
var myRe = /^.* you.*$/igm;
var myArray;
while ((myArray = myRe.exec(subtitle)) !== null) {
var msg = 'Found ' + myArray[0] + '. ';
msg += 'Next match starts at ' + myRe.lastIndex;
console.log(msg);
}

答案 1 :(得分:1)
我检查了你的正则表达式链接。正如你所说,它给出了期望的结果。我验证了它,它在两个不同的组中捕获。这个网站还提供代码生成工具,检查同一网站的左侧边栏?
我已经在Javascript中为您完成了测试,并进行了测试。如果您想要任何其他语言,请自己生成。如果您遇到任何困难,请发表评论。 :)
const regex = /^.* you.*$/gmi;
const str = `4
00:00:24.067 --> 00:00:35.924
Hi, how are you?
Doing fine?
5
00:00:35.926 --> 00:00:47.264
I'm doing the best I can.
And you?
`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}