JavaScript 正则表达式:从多行文本中提取第一个匹配的值

JavaScript RegEx : Extract the first matched value from a Multiline Text

提问人:Jenson M John 提问时间:6/20/2023 更新时间:6/20/2023 访问量:93

问:

好吧,我有一个如下所示的多行文本。我想在使用 JavaScript 正则表达式后提取第一个匹配内容值(此处)。Matching String () 可以位于任何行上。10Messi: Messi:

Neymar: 11
Messi: 10
Ronaldo: 7
Chhetri: 11
Messi: 18

--提前致谢。

JavaScript 正则表达式 字符串 匹配 文本提取

评论


答:

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