Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串分成三个部分,并使用javascript从右到左用一个点连接_Javascript_Regex - Fatal编程技术网

将字符串分成三个部分,并使用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
你们真是不可思议!你们真是不可思议!