2009-08-14 82 views
1

前面的空間,我需要一個字符串轉換是這樣的:正則表達式匹配不能用逗號

tag, tag2, longer tag, tag3 

到:

tag, tag2, longer-tag, tag3 

爲了這短暫的,我需要更換沒有逗號分開的空間連字符和我需要在Javascript中這麼做。

回答

5

我認爲這應該工作

var re = new RegExp("([^,\s])\s+" "g"); 
var result = tagString.replace(re, "$1-"); 

編輯:Blixt的觀察後更新。

+0

我接受這個,因爲它是第一個工作。不能相信我忘了$ 1 ... – 2009-08-14 12:32:20

+0

正如下面的建議你可以使用\ s而不是空間,如果你想匹配標籤等,但我把它從字面上看成是空格:) – Runeborg 2009-08-14 12:36:35

+1

不要認爲後面跟一個逗號兩個或多個逗號將在標籤前加上 - :'abc, def'變成'abc,-def'你想要的是'/([^,\ s])\ s +/g',替換爲'「 $ 1「'。 – Blixt 2009-08-14 12:56:00

-2
([a-zA-Z]){1,} 

也許吧?未經測試。類似的東西。

2

mystring.replace(/([^,])\s+/i "$1-");有一個更好的方式來做到這一點,但我不記得的語法

+0

我相信你想要'g'的標誌,而不是'i'的標誌。首先,沒有字符不區分大小寫,其次,如果沒有'g'標誌,它只會取代第一個匹配。此外,你在那裏忘了逗號'=)' – Blixt 2009-08-14 12:59:24

1

[^,] =不是逗號

編輯對不起,沒注意更換前。現在我已經更新了我的答案:

var exp = new RegExp("([^,]) "); 
tags = tags.replace(exp, "$1-"); 
0
text.replace(/([^,]) /, '$1-'); 
0

不幸的是,JavaScript腳本不支持負lookbehinds,所以你不得不使用這樣的事情(從here修改):

var output = 'tag, tag2, longer tag, tag3'.replace(/(,)?t/g, function($0, $1){ 
    return $1 ? $0 : '-'; 
}); 
+0

我不知道你可以放一個「。」在JavaScript中的字符串文字後。很高興知道,謝謝! – 2009-08-14 12:32:28

0

([^,]) - 第一個字符不是逗號,第二個字符是空格,它搜索那種字符串

+0

對不起,這可能不在JavaScript中 – agnieszka 2009-08-14 12:29:57