正则表达式:在每行上的单个字符之前获取匹配项

时间:2017-04-30 01:35:32

标签: javascript regex

我想在以下文本中使用JavaScript进行一些正则表达式匹配:

  

文字:blah

     

一些文字:等等

     

更多文字:blah blah

     

其他文字:blah blah

我想匹配每个冒号之前的所有单词:TextSome TextSome more textOther Text。到目前为止,我只能使用以下表达式匹配第一个匹配项:/^(.*?):/g(组1)。

如何匹配所有事件? (每行只有一个冒号)。

根据我的阅读,我认为我需要使用[\s\S],但我不确定如何。

2 个答案:

答案 0 :(得分:1)

您可以查找第一个:之前的字符,但可以在"多行"上进行匹配。使用m标志的基础:

/^([\w ]+?):/gm

查看Regex101上的可视示例。

并查看将整个文本块中的所有匹配项都放入数组的示例:



let text = `
Text: blah
Some Text: blah
Some more text: blah blah
Other Text: blah blah
`;

let captures = [];
text.replace(/^([\w ]+?):/gm, (match, capture) => {
  captures.push(capture);
});

console.log(captures);




答案 1 :(得分:1)

使用lookahead assertion(?=)来匹配冒号,以及m flag,以便您使用^来匹配行的开头:

let text = `Text: blah
Some Text: blah
Some more text: blah blah
Other Text: blah blah`;
    
console.log(text.match(/^.*(?=:)/gm));

这样做的好处是,您可以轻松地只替换匹配的部分:

let text = `Text: blah
Some Text: blah
Some more text: blah blah
Other Text: blah blah`;
        
console.log(text.replace(/^.*(?=:)/gm, m => `...${m}...`));