我想解析下面的文本:收件人姓名:商品编号:103990我只想提取"Tracy",即"Recipient Name:"之后的第一个单词作为名字所以我得到了最远的/(?<=Recipient Name: )(.*)(?= SKU)/gm,但它只给我"特雷西陈"...使用regex101中的ecma选项...感谢你的帮助。谢谢,崔西
/(?<=Recipient Name: )(.*)(?= SKU)/gm
p1iqtdky1#
(?<=Recipient Name: )([^ ]+) .*(?= SKU)
这个作品
t9aqgxwy2#
使用\S+来匹配非空白字符序列,而不是.*,以获得一个单词。
\S+
.*
let text = 'Recipient Name: Tracy Chan SKU: 103990'; let match = text.match(/(?<=Recipient Name: )\S+/); console.log(match[0]);
vwhgwdsa3#
要仅提取“Tracy”,可以使用以下正则表达式:
/(?<=Recipient Name: )(\S+)/gm
这将匹配“Recipient Name:“字符串后的第一个单词(即第一个非空格字符序列)。\S字符类匹配任何非空白字符,+限定符指定前面的模式应该匹配一次或多次,直到第一个空白。一个工作示例:
\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"
更新:根据你下面的评论,你还需要从你的字符串值中提取姓氏。我建议要么使用你问题中写的原始正则表达式,要么使用这个,以便提取Tracy和Chan,然后你可以使用javascript split方法'将字符串拆分成一个包含所有提取的名字的数组。考虑下面的例子:
Tracy
Chan
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"
3条答案
按热度按时间p1iqtdky1#
这个作品
t9aqgxwy2#
使用
\S+
来匹配非空白字符序列,而不是.*
,以获得一个单词。vwhgwdsa3#
要仅提取“Tracy”,可以使用以下正则表达式:
这将匹配“Recipient Name:“字符串后的第一个单词(即第一个非空格字符序列)。
\S
字符类匹配任何非空白字符,+
限定符指定前面的模式应该匹配一次或多次,直到第一个空白。一个工作示例:
更新:根据你下面的评论,你还需要从你的字符串值中提取姓氏。我建议要么使用你问题中写的原始正则表达式,要么使用这个,以便提取
Tracy
和Chan
,然后你可以使用javascriptsplit
方法'将字符串拆分成一个包含所有提取的名字的数组。考虑下面的例子: