Javascript Regex 从两个不同格式的文本块中获取特定字符串

Posted

技术标签:

【中文标题】Javascript Regex 从两个不同格式的文本块中获取特定字符串【英文标题】:Javascript Regex to get specific string from two differently-formatted text blocks 【发布时间】:2015-06-07 16:00:04 【问题描述】:

我需要一个可以在 javascript 中使用的正则表达式,它允许我从两种不同格式的纯文本订单确认电子邮件中提取仅跟踪号

第一封确认邮件:

(跟踪号始终是“跟踪号”正下方的那一行)

Tracking Number
1ZA828Y12313205351

第二封确认邮件:

(跟踪号始终在同一行,在冒号和(可能)可变数量的空格字符之后)

Carrier Tracking Number :  582612345988

另外,澄清一下:运单号始终是大写字母和数字的任意组合(不一定以“1Z”开头)。

【问题讨论】:

Tracking Number\s*:?\s*([A-Z0-9]+),然后打印组索引1。 【参考方案1】:
(?:Carrier )?Tracking Number\s*:?\s*([A-Z0-9]+)

试试这个。抓住捕获或组。查看演示。

https://regex101.com/r/nS2lT4/28

【讨论】:

对不起,我说得太早了。这似乎适用于 php,但我在侧边栏中将其更改为 Javascript,它正确显示了匹配项,但实际上并未捕获捕获组。 link。在我的 Javascript 中,我这样做:var trackingNum = messageText.match(/(?:Carrier )?Tracking Number\s*:?\s*([A-Z0-9]+)/gm);,它返回整个“组 #0”(其中包括“跟踪号”或“承运人跟踪号”文本。 @mike 你需要使用group 1 好的,谢谢。我通过像这样引用第 1 组来让它工作:var trackingNumRegex = /(?:Carrier )?Tracking Number\s*:?\s*([A-Z0-9]+)/gm; var trackingNum = trackingNumRegex.exec(messageText)[1];【参考方案2】:

简单的呢

[A-Z0-9]([A-Z0-9])+

这听起来可能很难看,但如果你知道永远不会有两个大写字符一个接一个,它就会起作用。

【讨论】:

这会捕获整个跟踪号,但只匹配最后一个字符。 link @mike,不,根据您发送的内容,它与整数匹配,只是将其分为两组。 这符合我的需要:([A-Z0-9]+[A-Z0-9])+link @mike 我猜这个问题与分组有关。无论如何,我很接近:) 这里也说得太早了——这在仅对该示例文本进行测试时有效,但在整个消息正文的上下文中释放时变得疯狂。

以上是关于Javascript Regex 从两个不同格式的文本块中获取特定字符串的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript RegEx:在两个“标记”之间替换字符串中的文本

Javascript 的奇怪 RegEx 请求

Javascript regex - 从字符串中获取函数名

用于验证美国电话号码格式的 RegEx

正则表达式 - 从字符串中提取电话号码

JavaScript / regex:删除字符串中括号之间的文本[重复]