我基本上要解析字符串,如:JavaScript的簡單的正則表達式 - 限制字符串恰好有「#」作爲第一個字符
"#FFFFFF" to "#FFFFFF",
"##FFFFFF" to "#FFFFFF",
"FFFFFF" to "#FFFFFF"
我有問題,使得一個通用的正則表達式來處理案件喜歡這個。任何幫助,將不勝感激。
我基本上要解析字符串,如:JavaScript的簡單的正則表達式 - 限制字符串恰好有「#」作爲第一個字符
"#FFFFFF" to "#FFFFFF",
"##FFFFFF" to "#FFFFFF",
"FFFFFF" to "#FFFFFF"
我有問題,使得一個通用的正則表達式來處理案件喜歡這個。任何幫助,將不勝感激。
var str = '###FFFF';
str = str.replace (/^#*/, '#')
替換0個或多個:
new RegExp("(^#+|^)");
// #Test -> #Test
// ####Test -> #Test
// Test -> #Test
你想要的東西像/^[#][^#]*$/
function formatThing(string){
return "#" + string.replace(/#/g,"");
}
全部替換什麼也沒有 '#',並堅持以 '#' 在前面。在我看來,這比任何令人費解的正則表達式更具有可讀性。它適用於所有提供的三個輸入,以及其他一些奇怪的情況。
請注意,這是爲轉換作爲您的問題建議你想要的,不匹配。如果你試圖對不同的輸入進行標準化,那麼更好,因爲X到Y是你在問題中寫的。以「## FFFFFF」和匹配所有除第一個「#」,或者拒絕配合「FFFFFF」,因爲它缺乏一個領先的「#」是不夠這裏馬上蝙蝠。
你會想要匹配任何數量的#或然後在開始的任何東西。像這樣(見jsFiddle):
resultString = sourceString.replace(/^#*/, "#");
只是FYI,你不需要「g」修飾符。 – 2012-08-10 18:51:23
沒錯,應該只有其中的一個,因爲他希望從字符串的開頭開始。我正在修復代碼。 – scottheckel 2012-08-10 19:22:35
我會的#
單個實例替換#
任何字符(或無)開頭#單個字符串開頭的#出現#
var string = "#fffff";
string = string.replace(/#*/g, function(m, i){ return !i?"#":"";});
函數回調?真? – 2012-08-10 18:51:17
這不會驗證字符串是實際上是一個有效的顏色,但只是執行該字符串有且只有一個哈希作爲第一個字符(通過剝離從字符串中的所有哈希無論他們在哪裏,然後在前面加一個):
var colorString = "##ffffff";
console.log("#" + colorString.replace(/#/g, "")); // prints #ffffff
另一種增加混合的解決方案,用於檢查帶有或不帶前導#的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"));
哇 - 這麼多瘋狂複雜的解決方案... – 2012-08-10 18:46:50