从匹配中获得发现的价值(正则表达式)

时间:2018-07-19 14:07:27

标签: javascript regex

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

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

我正在使用以下代码:

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

问题在于,在第一种情况下,我得到一个数组,其中“ orange”位于一个位置,而在第二种情况下,“ orange”位于两个位置。

无论使用哪种情况来找到价值(水果名称)的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

您可以使用捕获组。首先将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)

答案 1 :(得分:0)

如果您确定每次都使用这种格式的字符串,并且不想使用regex,那么这是适合您的解决方案:

var str1 = 'fruit orange (some text)'
var str2 = 'fr. mango (some text)'

fruitFinder = str => str.split(' ')[1]

console.log(fruitFinder(str1));
console.log(fruitFinder(str2));