2017-03-05 27 views
1

嗨,大家好我想重新使用表達式捕獲另一組的Javascript正則表達式,再使用一組馬赫另一組

例如:

我需要尋找US $4.5-8.8
結構爲:Part1-第2部分

part1的第2部分有相同的代碼,我可以用像組第1部分,然後再在第2部分

我doned表達式中使用,直到4.5-XXXX在

US \$([0-9]{1}(?=\.{1})\.{1}[0-9]+)(?=\-)\- 

檢查:https://regex101.com/r/E2MjWh/1

我應該怎麼做重新使用第一組?這是很容易在其他lenguague,但我不能做到這一點在JavaScript ..

PD:我需要它的正則表達式,不包括像變種javascript代碼......等等等等。

+0

您不能遞歸子模式,但可以定義變量並動態構建模式。或者使用['/^US\s+\$(\d*\.?\d+)-(\d*\.?\d+)$/'](https://regex101.com/)這樣的單個正則表達式r/DbZvFs/2) –

+0

@WiktorStribiżew哦,好的,哥們,非常感謝你 – Milor123

回答

1

第一,看看你的正則表達式:積極的lookahead並不是真正需要的,因爲它們只需要與以下消費子模式相同的東西。 (?=\.{1})\.{1}表示*需要立即在當前位置的右側1個點,然後匹配點,並且(?=\-)\-具有類似的含義,要求和匹配-符號。

現在,您問是否可以使用regex語法重複模式的相同部分。不,在JS正則表達式中是不可能的。

您可以使用下面的正則表達式的整個字符串匹配像您一樣的:

/US\s+\$(\d+\.\d+)-(\d+\.\d+)/ 

regex demo。當然,您可以添加單詞邊界(匹配US作爲整個單詞)或錨(匹配整個輸入字符串)或用\d*\.?\d+替換\d+\.\d+部分(以匹配整數或浮點數)以進一步增強該模式。

有一種方法通過將重複的部分轉換成可變縮短模式和建立該正則表達式動態使用構造表示法:

var price = "\\d*\\.?\\d+"; 
var reg = new RegExp("US\\s+\\$(" + price + ")-(" + price + ")"); 

如果需要添加所需的改性劑。

相關問題