我想在以下文本中使用JavaScript进行一些正则表达式匹配:
文字:blah
一些文字:等等
更多文字:blah blah
其他文字:blah blah
我想匹配每个冒号之前的所有单词:Text
,Some Text
,Some more text
,Other Text
。到目前为止,我只能使用以下表达式匹配第一个匹配项:/^(.*?):/g
(组1)。
如何匹配所有事件? (每行只有一个冒号)。
根据我的阅读,我认为我需要使用[\s\S]
,但我不确定如何。
答案 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}...`));