2017-10-17 41 views
0

我們指的是同一系統的兩種方式正則表達式的一部分:要麼|或者匹配兩種可能性

  • tr12345
  • fr12345

現在我有每變化一個正則表達式如

  1. /(?:^|^\s|[^\/a-zA-Z0-9])tr([0-9]+).*$/img
  2. /(?:^|^\s|[^\/a-zA-Z0-9])fr([0-9]+).*$/img

這工作正常,但我認爲它可以通過結合兩者更高效。我從其他文章中看到,您可以使用更改|來匹配變體。如果我想要匹配兩者,我需要在「tr」之後重複正則表達式嗎? E.g是這樣的可能嗎?

/(?:^|^\s|[^\/a-zA-Z0-9])tr|fr([0-9]+).*$/img 

例INPUT1:

tr12345

希望的輸出1:

實施例輸入2:

fr123456

期望輸出2:

我一直在這裏玩的: https://regex101.com/r/FUCmv0/2

+2

嘗試['s.replace(/ \ B [TF] R 「[T,R]中的一個」 \ S?([0-9] +)/ IG, '$ 1')'](https://regex101.com/r/mAIf0S/1) –

回答

1

你正在試圖做的它在一個錯誤的 辦法。 '|'實際上是OR,並且具有低優先級,讓你的正則表達式是... TR或FR ......,但你需要......(TR | FR)...

所以,你應該用()(像數學表達式)。和正則表達式將是

/(?:^|^\s|[^\/a-zA-Z0-9])(tr|fr)([0-9]+).*$/img 

注意()也產生匹配組。

但在你的情況下表達會更好:

/(?:^|^\s|[^\/a-zA-Z0-9])[tf]r([0-9]+).*$/img 

這裏[tf]裝置

+0

有趣,謝謝。雖然變化不止一個字母的情況會發生什麼情況? E.g tr12345&kn12345?方括號只能匹配單個字符,對嗎?或者我可以將兩個字符分組爲OR表達式嗎?我可能會過於複雜...... – Tiago

+0

@Tiago,OR在這種情況下工作正常。例如,/ ab(aca | cde)ba /將匹配abacaba和abcdeba以匹配組'aca'或'cde' –

+1

謝謝!這似乎是行得通的,包括將其設置爲非捕獲組:[/(?:^ |^\ s | [^ \/a-zA-Z0-9])(?: tr | fr)([0- 9] +)。* $/img' – Tiago

相關問題