Regex -从字符串中提取第一个单词

nue99wik  于 2022-12-24  发布在  其他
关注(0)|答案(3)|浏览(220)

我想解析下面的文本:
收件人姓名:商品编号:103990
我只想提取"Tracy",即"Recipient Name:"之后的第一个单词作为名字
所以我得到了最远的/(?<=Recipient Name: )(.*)(?= SKU)/gm,但它只给我"特雷西陈"...使用regex101中的ecma选项...
感谢你的帮助。
谢谢,崔西

p1iqtdky

p1iqtdky1#

(?<=Recipient Name: )([^ ]+) .*(?= SKU)

这个作品

t9aqgxwy

t9aqgxwy2#

使用\S+来匹配非空白字符序列,而不是.*,以获得一个单词。

let text = 'Recipient Name: Tracy Chan SKU: 103990';
let match = text.match(/(?<=Recipient Name: )\S+/);
console.log(match[0]);
vwhgwdsa

vwhgwdsa3#

要仅提取“Tracy”,可以使用以下正则表达式:

/(?<=Recipient Name: )(\S+)/gm

这将匹配“Recipient Name:“字符串后的第一个单词(即第一个非空格字符序列)。
\S字符类匹配任何非空白字符,+限定符指定前面的模式应该匹配一次或多次,直到第一个空白。
一个工作示例:

const input = "Recipient Name: Tracy Chan SKU: 103990";
const regex = /(?<=Recipient Name: )(\S+)/gm;
const matches = regex.exec(input);
console.log(matches[0]);  // "Tracy"

更新:根据你下面的评论,你还需要从你的字符串值中提取姓氏。我建议要么使用你问题中写的原始正则表达式,要么使用这个,以便提取TracyChan,然后你可以使用javascript split方法'将字符串拆分成一个包含所有提取的名字的数组。
考虑下面的例子:

const input = "Recipient Name: Tracy Chan SKU: 103990";
    const regex = /(?<=Recipient Name: )([^ ]+)\s([^ ]+)/gm;
    const allMatches = input.match(regex);
    let resultArray = allMatches[0].split(' ');
    console.log('firstName: '+ resultArray[0]);  // "Tracy"
    console.log('lastName: '+ resultArray[1]);  // "Chan"

相关问题