提问人:Jenson M John 提问时间:6/20/2023 更新时间:6/20/2023 访问量:93
JavaScript 正则表达式:从多行文本中提取第一个匹配的值
JavaScript RegEx : Extract the first matched value from a Multiline Text
问:
好吧,我有一个如下所示的多行文本。我想在使用 JavaScript 正则表达式后提取第一个匹配内容值(此处)。Matching String () 可以位于任何行上。10
Messi:
Messi:
Neymar: 11
Messi: 10
Ronaldo: 7
Chhetri: 11
Messi: 18
--提前致谢。
答:
1赞
Reilas
6/20/2023
#1
您可以使用以下模式。
/Messi: (.+?)$/m
将与行的末尾匹配,因此这将捕获所有内容。$
例
var string = `Neymar: 11
Messi: 10
Ronaldo: 7
Chhetri: 11
Messi: 18`
var matches = string.match(/Messi: (.+?)$/m)
console.log(matches[1])
评论
0赞
Jenson M John
6/21/2023
这个代码较少的解决方案效果很好。谢谢。我不确定为什么我的问题收到了 -ve 投票。
-1赞
Peter Thoeny
6/20/2023
#2
此函数查找所选键的值:
const input = `Neymar: 11
Messi: 10
Ronaldo: 7
Chhetri: 11
Messi: 18`
function findValue(str, key) {
const regex = new RegExp('\\b' + key + ': ([^\\n]*)');
const matches = str.match(regex);
return matches ? matches[1] : null;
}
let value = findValue(input, 'Messi');
console.log('Messi =>', value);
value = findValue(input, 'Foo');
console.log('Foo =>', value);
输出:
Messi => 10
Foo => null
正则表达式构造函数的解释:
'\\b'
-- 词边界+ key +
-- 动态连接键': ([^\\n]*)'
-- 期待一个冒号、一个空格,并捕获之后的所有内容,直到下一个换行符
-2赞
Thomas
6/20/2023
#3
将这个字符串解析为某种数据结构,然后使用它而不是乱用正则表达式不是更好吗?
const str = `
Neymar: 11
Messi: 10
Ronaldo: 7
Chhetri: 11
Messi: 18
`;
const data = Object.fromEntries(
str.split("\n") // get rows
.filter(v => v.trim()) // remove empty rows
.map(row => { // parse row
const [k, v] = row.split(":", 2);
return [k.trim(), parseFloat(v)]
})
);
console.log("data", data);
console.log("data.Messi", data["Messi"]);
评论
0赞
Jenson M John
8/9/2023
答案应该是第一场比赛,这里是.10
评论