我有一个字符串是:
2012.2008.The.Victorias.Secret.Fashion.Show.2016.720p.HDTV.x264-HD.MA.5.1 21d.BATV <6>-20
我想将所有点替换为空格但没有&#39; 5.1&#39;,如何编写正则表达式字符串?
5.1
可能是6.1
,7.1
2.1
,点前一个数字和点后一个数字,234.123
需要将点替换为空格。
我在下面给出一些字符串:
Cast.Away.2000.1080p.Blu-ray.AVC.DTS-HD.MA.5.1-XOXO-HDSky
5.1
不替换,其他需要替换
Resident.Evil.The.Final.Chapter.2016.BluRay.1080p.AVC.DTS-HD.MA7.1-LKReborn-CHDBits
7.1
不替换,其他需要替换
答案 0 :(得分:1)
您可以使用此string.replace
with a callback function:
let str = '2012.2008.Resident6.1.Evil 4.3.The 7.8 .Final.Chapter.2016.BluRay.1080p.AVC.DTS-HD.MA.5.2-LKReborn, get the result 2012 2008 Resident6.1 Evil 4.3 The 7.8 Final Chapter 2016 BluRay 1080p AVC DTS-HD MA.5.2-LKReborn';
var re = /((?:^|\D)\d\.\d(?=\D|$))|\./g;
var repl = str.replace(re, function($0, $1) {
return ($1 ? $1.replace(/^\./, ' ') : ' ');
});
console.log(repl);
此处正则表达式/((?:^|\D)\d\.\d(?=\D|$))|\./
匹配并捕获捕获的组#1中的digit.digit
。在回调函数中,我们检查是否存在$1
(捕获的组#1)以确定是否替换匹配空格或$1
(初始点被空格替换)。
答案 1 :(得分:0)
您可以匹配5.1或7.1并捕获捕获的组1中的其他点:
在使用replace时,您可以检查子匹配是否等于点。
const strings = [
"Resident.Evil.The.Final.Chapter.2016.BluRay.1080p.AVC.DTS-HD.MA7.1-LKReborn-CHDBits",
"2012.2008.The.Victorias.Secret.Fashion.Show.2016.720p.HDTV.x264-HD.MA.5.1 21d.BATV <6>-20",
"Cast.Away.2000.1080p.Blu-ray.AVC.DTS-HD.MA.5.1-XOXO-HDSky"
];
let pattern = /[57]\.1\b|(\.)/g;
strings.forEach((str) => {
console.log(str.replace(pattern, function(match, p1) {
return p1 === "." ? " " : match;
}));
});
&#13;