0

我基本上想解析一个字符串,例如:

"#FFFFFF"   to "#FFFFFF",
"##FFFFFF"  to "#FFFFFF",
"FFFFFF"    to "#FFFFFF"

我在制作将处理此类情况的通用正则表达式时遇到问题。任何帮助,将不胜感激。

4

8 回答 8

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

用单个 # 替换字符串开头出现的 0 次或多次 #

于 2012-08-10T18:44:52.180 回答
1

你想要类似的东西/^[#][^#]*$/

于 2012-08-10T18:35:19.230 回答
1
function formatThing(string){
    return "#" + string.replace(/#/g,"");
}

将所有“#”替换为空,并在前面粘贴“#”。在我看来,这比任何复杂的正则表达式都更具可读性。它适用于提供的所有三个输入,以及其他一些奇怪的情况。

请注意,这是为了转换您的问题建议您想要的,而不是匹配的。如果您尝试标准化不同的输入,则更好,因为您在问题中写的 X 到 Y 意义上。取“##FFFFFF”并匹配除第一个“#”以外的所有内容,或拒绝匹配“FFFFFF”,因为它缺少前导“#”,这在此是不够的。

于 2012-08-10T18:36:03.090 回答
1

您将要匹配任意数量的 # OR 然后是开头的任何内容。像这样(见jsFiddle):

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

// #Test -> #Test
// ####Test -> #Test
// Test -> #Test
于 2012-08-10T18:42:39.867 回答
1

我会用#单个实例替换开头的任何(或没有)字符#

resultString = sourceString.replace(/^#*/, "#");
于 2012-08-10T18:43:46.833 回答
1
var string = "#fffff";
string = string.replace(/#*/g, function(m, i){ return !i?"#":"";});
于 2012-08-10T18:45:35.837 回答
0

这不会验证字符串实际上是有效的颜色,而只是强制字符串只有一个哈希作为第一个字符(通过从字符串中剥离所有哈希,无论它们在哪里,然后在前面添加一个):

var colorString = "##ffffff";

console.log("#" + colorString.replace(/#/g, "")); // prints #ffffff
于 2012-08-10T18:51:11.180 回答
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" ) );
于 2012-08-10T18:54:05.390 回答