2016-02-19 61 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錨這樣[^|]+(?=\|[^|]+$)