2016-09-22 52 views
1

我有這樣的正則表達式語法: 「 - (= [A-Z])(< = [A-Z])」平移正則表達式語法在PHP和Python努力JS

它捕獲2個小寫字母之間的破折號。在下面的示例中,第二個短劃線被捕獲:

Krynica-Zdrój,ul。 Uzdro-jowa

不幸的是,我不能在JS中使用< =。 我的最終目標是使用RegEx替換刪除連字符。

+0

我想用替代擺脫這種連字符。 –

+0

關於/ \ b- \ b/g,它會返回連字符。關於第二種模式,我不知道如何讓它發揮作用,沒有改變就沒有檢測到任何東西。 –

+0

是的,我在下面提供了一個解決方案。讓我刪除我的第一條評論。 –

回答

1

在我看來,你需要刪除小寫字母之間的連字符。

使用

var s = "Krynica-Zdrój, ul. Uzdro-jowa"; 
 
var res = s.replace(/([a-z])-(?=[a-z])/g, "$1"); 
 
console.log(res);

注意第一回顧後變成一個簡單的捕獲組和第二先行是OK,因爲使用 - 潛在的,如果也有複姓單小寫字母塊 - 它將能夠處理重疊的比賽。

詳細

  • ([a-z]) - 第1組拍攝小寫ASCII字母
  • - - 一個連字符
  • (?=[a-z]) - 後跟與不添加到結果的小寫ASCII字母 - /g - 全局修飾符,搜索所有出現的模式
  • "$1" - 替換模式僅包含對存儲在組1緩衝區中的值的反向引用。

VBA代碼示例

Sub RemoveExtraHyphens() 
Dim s As String 
Dim reg As New regexp 

reg.pattern = "([a-z])-(?=[a-z])" 
reg.Global = True 

s = "Krynica-Zdroj, ul. Uzdro-jowa" 
Debug.Print reg.Replace(s, "$1") 
End Sub 

enter image description here

+0

我試過/([a-z]) - (?= [a-z])/ g,在我的例子中它返回「o-」。 –

+0

*你的*例子在哪裏?請分享。如果你使用* mine *,你會發現它運行良好。 –

+0

我的例子是Krynica-Zdrój,ul。 Uzdro-jowa,我在https://regex101.com/#javascript上檢查了/([az]) - (?= [az])/ g,我也許不明白,所以我會解釋一下我需要在使用JS RegEx語法的VBA中使用的模式。 –