我基本上想解析一个字符串,例如:
"#FFFFFF" to "#FFFFFF",
"##FFFFFF" to "#FFFFFF",
"FFFFFF" to "#FFFFFF"
我在制作将处理此类情况的通用正则表达式时遇到问题。任何帮助,将不胜感激。
我基本上想解析一个字符串,例如:
"#FFFFFF" to "#FFFFFF",
"##FFFFFF" to "#FFFFFF",
"FFFFFF" to "#FFFFFF"
我在制作将处理此类情况的通用正则表达式时遇到问题。任何帮助,将不胜感激。
var str = '###FFFF';
str = str.replace (/^#*/, '#')
用单个 # 替换字符串开头出现的 0 次或多次 #
你想要类似的东西/^[#][^#]*$/
function formatThing(string){
return "#" + string.replace(/#/g,"");
}
将所有“#”替换为空,并在前面粘贴“#”。在我看来,这比任何复杂的正则表达式都更具可读性。它适用于提供的所有三个输入,以及其他一些奇怪的情况。
请注意,这是为了转换您的问题建议您想要的,而不是匹配的。如果您尝试标准化不同的输入,则更好,因为您在问题中写的 X 到 Y 意义上。取“##FFFFFF”并匹配除第一个“#”以外的所有内容,或拒绝匹配“FFFFFF”,因为它缺少前导“#”,这在此是不够的。
您将要匹配任意数量的 # OR 然后是开头的任何内容。像这样(见jsFiddle):
new RegExp("(^#+|^)");
// #Test -> #Test
// ####Test -> #Test
// Test -> #Test
我会用#
单个实例替换开头的任何(或没有)字符#
:
resultString = sourceString.replace(/^#*/, "#");
var string = "#fffff";
string = string.replace(/#*/g, function(m, i){ return !i?"#":"";});
这不会验证字符串实际上是有效的颜色,而只是强制字符串只有一个哈希作为第一个字符(通过从字符串中剥离所有哈希,无论它们在哪里,然后在前面添加一个):
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" ) );