2012-08-10 48 views

回答

3
var str = '###FFFF'; 
str = str.replace (/^#*/, '#') 

替換0個或多個:

new RegExp("(^#+|^)"); 

// #Test -> #Test 
// ####Test -> #Test 
// Test -> #Test 
1

你想要的東西像/^[#][^#]*$/

1
function formatThing(string){ 
    return "#" + string.replace(/#/g,""); 
} 

全部替換什麼也沒有 '#',並堅持以 '#' 在前面。在我看來,這比任何令人費解的正則表達式更具有可讀性。它適用於所有提供的三個輸入,以及其他一些奇怪的情況。

請注意,這是爲轉換作爲您的問題建議你想要的,不匹配。如果你試圖對不同的輸入進行標準化,那麼更好,因爲X到Y是你在問題中寫的。以「## FFFFFF」和匹配所有除第一個「#」,或者拒絕配合「FFFFFF」,因爲它缺乏一個領先的「#」是不夠這裏馬上蝙蝠。

1

你會想要匹配任何數量的#或然後在開始的任何東西。像這樣(見jsFiddle):

resultString = sourceString.replace(/^#*/, "#"); 
+1

只是FYI,你不需要「g」修飾符。 – 2012-08-10 18:51:23

+0

沒錯,應該只有其中的一個,因爲他希望從字符串的開頭開始。我正在修復代碼。 – scottheckel 2012-08-10 19:22:35

1

我會的#單個實例替換#任何字符(或無)開頭#單個字符串開頭的#出現#

1
var string = "#fffff"; 
string = string.replace(/#*/g, function(m, i){ return !i?"#":"";}); 
+0

函數回調?真? – 2012-08-10 18:51:17

0

這不會驗證字符串是實際上是一個有效的顏色,但只是執行該字符串有且只有一個哈希作爲第一個字符(通過剝離從字符串中的所有哈希無論他們在哪裏,然後在前面加一個):

var colorString = "##ffffff"; 

console.log("#" + colorString.replace(/#/g, "")); // prints #ffffff 
0

另一種增加混合的解決方案,用於檢查帶有或不帶前導#的3-6字母十六進制代碼。

var re = /#?([A-F0-9]{3,6})/i; 
function getHex (str){ 
    var val = str.match(re) 
    return val ? "#" + val[1] : null; 
} 

console.log(getHex("#FFFFFF")); 
console.log(getHex("##FFFFFF")); 
console.log(getHex("FFFFFF")); 
相關問題