无需特殊规则即可替换所有点

时间:2018-05-18 17:10:31

标签: javascript regex

我有一个字符串是:

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.17.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不替换,其他需要替换

2 个答案:

答案 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中的其他点:

[57]\.1\b|(\.)

在使用replace时,您可以检查子匹配是否等于点。

&#13;
&#13;
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;
&#13;
&#13;