将字符串分成三个部分,并使用javascript从右到左用一个点连接
我正在为一个输入做一个规则,规则是正确的 问题是在规则之后格式化输入 我需要这个:将字符串分成三个部分,并使用javascript从右到左用一个点连接,javascript,regex,Javascript,Regex,我正在为一个输入做一个规则,规则是正确的 问题是在规则之后格式化输入 我需要这个: String.prototype.myFormat = function(){ // ... }; var example1 = "habc123def".myFormat(); // should return "h.abc.123.def" var example2 = "12a45".myFormat(); // should return "12.a45" 我不知道正则表达式是否
String.prototype.myFormat = function(){
// ...
};
var example1 = "habc123def".myFormat(); // should return "h.abc.123.def"
var example2 = "12a45".myFormat(); // should return "12.a45"
我不知道正则表达式是否能帮上忙,因为字符串长度未知
提前感谢。您可以使用此基于前瞻性的正则表达式替换:
var str = 'habc123def';
str = str.replace(/(?=(.{3})+$)/gm, ".");
//=> h.abc.123.def
str = '12a45';
str = str.replace(/(?=(.{3})+$)/gm, ".");
//=> 12.a45
您可以使用此基于前瞻的正则表达式替换:
var str = 'habc123def';
str = str.replace(/(?=(.{3})+$)/gm, ".");
//=> h.abc.123.def
str = '12a45';
str = str.replace(/(?=(.{3})+$)/gm, ".");
//=> 12.a45
使用模的一种方法:
String.prototype.myFormat = function() {
var mod = this.length % 3 || 3;
return this.slice(0, mod) + this.slice(mod).replace(/.{3}/g, '.$&');
};
var str = "abc123def";
console.log(str.myFormat());
这样,当字符串长度是3的倍数时,就没有前导点。一种使用模的方法:
String.prototype.myFormat = function() {
var mod = this.length % 3 || 3;
return this.slice(0, mod) + this.slice(mod).replace(/.{3}/g, '.$&');
};
var str = "abc123def";
console.log(str.myFormat());
这样,当字符串长度是3的倍数时,就没有前导点。老实说,我不明白规则。。。在任何情况下,正则表达式的字符串长度都不是问题。请确保一个或两个正则表达式可以处理这个问题。但是您没有指定myFormat应该做什么。这两个例子所指的逻辑比你的标题所指的要复杂得多。它从右到左分为三组。颠倒字符串,然后拆分。@ray:令人惊讶的是,anubhava比我们更早地发现了这一点。。。那家伙疯了,哈哈。老实说,我不懂规矩。。。在任何情况下,正则表达式的字符串长度都不是问题。请确保一个或两个正则表达式可以处理这个问题。但是您没有指定myFormat应该做什么。这两个例子所指的逻辑比你的标题所指的要复杂得多。它从右到左分为三组。颠倒字符串,然后拆分。@ray:令人惊讶的是,anubhava比我们更早地发现了这一点。。。那家伙疯了,哈哈。为什么我不能用
?=.{3}
但是?=(.{3})
?因为我们在$
使用(?=(.{3})+$)
之前要确保这3个字符串的倍数。它也可以是:(?=(?:.{3})+$)
,这是一些性感的代码。我做了一个while循环,但我甚至不想提出代码,因为这太性感了:)值得一提的是'habc123def'.split(/(?=(?:{3})+$)/g)
和unmached group将显示没有内部匹配的数组只要注意一下,如果你想避免abc
变成.abc
,那么就使用/(?!^)(?=(?:{3})+$)/gm
为什么我不能使用?=.{3}
但是?=(.{3})
?因为我们使用(?=(.{3})+$)
确保在$
之前有三个字符串的倍数。它也可以是:(?=(?:.{3})+$)
,这是一些性感的代码。我做了一个while循环,但我甚至不想提出代码,因为这太性感了:)值得一提的是'habc123def'.split(/(?=(?:{3})+$)/g)
和unmached group将显示没有内部匹配的数组只要注意一下,如果你想避免abc
变成.abc
,那么就使用/(?!^)(?=(?:{3})+$)/gm
你们真是不可思议!你们真是不可思议!