首页 > 解决方案 > 从匹配中获取找到的值(正则表达式)

问题描述

需要从字符串中获取水果名称。该字符串可能有两种可能的方式:

'fruit orange (some text)' or 'fr. orange (some text)'

我正在使用以下代码:

match(/fruit (.*) \(|fr. (.*) \(|/i)

问题是,在第一种情况下,我得到一个在 1 个位置上带有“橙色”的数组,而在第二种情况下,“橙色”在 2 个位置上。

无论使用哪种情况来查找值(水果名称),获得发现值(水果名称)的最佳方法是什么?

标签: javascriptregex

解决方案


您可以使用捕获组。首先匹配fr与点或匹配的可选部分uit。然后匹配一个空白字符\s,然后在一个组中捕获不是空白字符\S+

^fr(?:\.|uit)\s(\S+)

或者使用更广泛的方法:

^\S+\s(\S+)

然后,您可以使用解构赋值从以下位置获取值String#match

let re = /^fr(?:\.|uit)\s(\S+)/i

let str1 = 'fruit orange (some text)'

let str2 = 'fr. orange (some text)'

let [,match1] = str1.match(re) // get str1.match(re)[1] while discarding str1.match(re)[0]

let [,match2] = str2.match(re)

console.log(match1)

console.log(match2)


推荐阅读