2016-02-19 63 views
2

我有一个这样的字符串:如何从右侧的正则表达式跟踪字符串?

var variable = 'one|two|three|four|five'; 

此正则表达式匹配/^(\w+)\|/第一个字(从左侧)。换句话说,$1返回one。现在我需要从右侧获得第二个字(four)。

EX1:

var variable = 'one|two|three'; 

我想two

EX2:

var variable = 'one|two|three|four'; 

我想three

EX3:

var variable = 'one|two|three|four|five|six|seven'; 

我想six

总是我想要第二个字从右侧。我怎样才能做到这一点?

+0

让我们看看你的JavaScript代码。 – MortenMoulder

+2

['str.match(/ \ |(\ w +)\ | \ w + $ /)[1]'](https://regex101.com/r/vZ5yR2/1)。在JS中,没有别的办法。 –

+0

@Snorlax什么?其实我需要检查'if(variable.test(/ second-word-form-right /)=='four'){return true; }' – stack

回答

1

另外,如果你想用纯正则表达式来做到这一点,你可以真正做到这一点:

(?:(.*)\|){2}

检查出此匹配的组:http://regexr.com/3crfr

然后为Javascript(或任何其他语言),只需提取组。你可以这样做:

var variable = 'one|two|three|four'; 
console.log(/(?:(.*)\|){2}/g.exec(variable)[1]); 

工作正常,是吗?

+0

@PatrickRoberts虽然检查组。 http://i.imgur.com/UId7K5Y.png – MortenMoulder

2

试试这个:

/\w+(?=\|\w+$)/ 

​​

如果不说服你,这里是一个展示link to regex 101它为好。

如果在先行是你太慢了,你也可以尝试:

/(\w+)\|\w+$/ 

仍然做同样的事情,但现在结果存储在一组,而不是直接返回,所以更改regexp.exec(input)[0]regexp.exec(input)[1]

var regexp = /(\w+)\|\w+$/; 
 

 
document.write(`<pre> 
 
${[ 
 
    'one|two|three', 
 
    'one|two|three|four', 
 
    'one|two|three|four|five', 
 
    'one|two|three|four|five|six' 
 
].map(input=>`${input}=>${regexp.exec(input)[1]}`).join('\n')} 
 
</pre>`)

1

忽略正则表达式,Y OU可以这样做:

var variable = 'one|two|three|four'; 
var result = variable.split("|"); 
console.log(result[result.length - 2]); 

如果你想用正则表达式来做到这一点,你可以这样做:

var variable = 'one|two|three|four'; 
console.log(variable.match(/\|(\w+)\|\w+$/)[1]); 

无论哪种方式工作得很好。

1

迭代方法,从输入字符串的末尾开始。起初|字符开头内循环,在第二|字符打破外环

var variable = "one|two|three|four|five" 
 
, i = variable.length 
 
, match = []; 
 
while (true) { 
 
    if (variable[i] === "|") { 
 
    while (variable[--i] !== "|") { 
 
     match.push(variable[i]); 
 
    } 
 
    match = match.reverse().join(""); 
 
    break; 
 
    } 
 
    --i 
 
}; 
 

 
console.log(match)

1

或者,你可以使用EOL锚这样[^|]+(?=\|[^|]+$)