正则表达式返回整行

时间:2017-05-01 18:09:31

标签: javascript regex

所以,我有一个字符串,当该行包含我正在搜索的单词时,我想返回整行。 我有这段代码:

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,我得到了所需的输出。

是的,有人可以帮助我吗?这是我第一次使用正则表达式,感觉有点迷失。

2 个答案:

答案 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}`);
    });
}