寻找最佳方法来获取具有可能重复的小数部分的任意数字,并发现重复部分(如果存在)。
最终,我需要用上划线符号(使用 css 文本装饰或 MathML mline)来装饰数字,所以我还需要知道重复开始的索引。
所以我需要正则表达式来得到(或者可以在算法中使用)得到以下结果:
1.333 // result: {"pattern": 3, index: 0}
1.5444 // result: {"pattern": 4, index: 1}
1.123123 // result: {"pattern": 123, index: 0}
1.5432121212 // result: {"pattern": 12, index: 4}
1.321 // result: null
1.44212 // result: null
附加示例(来自评论):
1.3333 // result: { "pattern": 3, index: 0}
function getRepetend(num) {
var m = (num+'').match(/\.(\d*?)(\d+?)\2+$/);
return m && {pattern: +m[2], index: m[1].length};
}
它的工作原理如下:
- 首先,将数字转换为字符串以便能够使用正则表达式。
- Then, match this regex:
/\.(\d*?)(\d+)\2+$/
:
-
\.
匹配小数点。
-
(\d*?)
匹配小数点和重复之间的数字,并将结果捕获到反向引用编号 1 中。
-
(\d+?)
匹配重复,并将其捕获到反向引用编号 2 中。
-
\2+
匹配 repetend 的重复。
-
$
匹配字符串结尾。
- 最后,如果比赛是
null
(即没有匹配),返回null
.
- 否则,返回一个对象,其中包含转换为数字的重复项(反向引用 2)以及点和重复项之间的位数(反向引用 1)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)