gpt4 book ai didi

JavaScript RegEx 部分匹配/只返回一组的匹配值

转载 作者:行者123 更新时间:2023-11-30 12:06:01 25 4
gpt4 key购买 nike

让我用一个例子来解释我的问题。假设我们有一个 RegEx 来匹配一个人的头衔和名字,我们将 RegEx 定义为

/(Mr|Mdm|Madam|Ms|Miss|Dr\.?)\s+([A-Z][a-z]+\s){1,4}/gm;

如果我们将其与长文本进行匹配

I spoke to Mr John Smith and he would like to refer me to Dr Baska

RegEx 将返回两个匹配的条目

  • 约翰·史密斯先生
  • 巴斯卡博士

我的问题是如何使 string.match (RegEx) 只返回一个没有标题的名称数组?

  • 约翰·史密斯
  • 晒太阳

更新

我看到了documentation about group operator () in MDN\1, \2 等提到内存组,但在语法上不确定这是否可以用于上述目的。

最佳答案

您可以使用 RegExp.execwhile循环获取人名。要获取名称,您可以使用捕获组。

var regex = /(Mr|Mdm|Madam|Ms|Miss|Dr)\.?\s+(([A-Z][a-z]+\s?){1,4})/g;
var str = "I spoke to Mr John Smith and he would like to refer me to Dr Baska";

// Declare array to store results
var persons = [];

while(match = regex.exec(str)) {
// Trim the person name and add in the array
persons.push(match[2].trim());
}

console.log(persons);
document.body.innerHTML = '<pre>' + JSON.stringify(persons, 0, 2) + '</pre>';

我还在 RegEx 中进行了一些更改以匹配和捕获人名。

RegEx101 Demo

/(Mr|Mdm|Madam|Ms|Miss|Dr)\.?\s+((?:[A-Z][a-z]+\s?){1,4})/
^^^ : Made it common for all and optional
^ ^ : To capture complete name
^^^ ^^ : Made the non-capturing group and last space optional

以下正则表达式也可以用于第一个捕获的组。

RegEx101 Demo

(?:Mr|Mdm|Madam|Ms|Miss|Dr)\.?\s+((?:[A-Z][a-z]+\s?){1,4})

关于JavaScript RegEx 部分匹配/只返回一组的匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com