需要从字符串中获取水果名称。字符串可能有2种可能的方式:
'fruit orange (some text)' or 'fr. orange (some text)'
我正在使用以下代码:
match(/fruit (.*) \(|fr. (.*) \(|/i)
问题在于,在第一种情况下,我得到一个数组,其中“ orange”位于一个位置,而在第二种情况下,“ orange”位于两个位置。
无论使用哪种情况来找到价值(水果名称)的最佳方法是什么?
答案 0 :(得分:5)
您可以使用捕获组。首先将fr
与匹配点或uit
的可选部分匹配。然后匹配空白字符\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));