Javascript 将一行上的所有斜杠替换为同一行开头的匹配斜杠

Javascript 将一行上的所有斜杠替换为同一行开头的匹配斜杠,javascript,regex,regexp-replace,regexp-substr,Javascript,Regex,Regexp Replace,Regexp Substr,我正在尝试更改一行中的所有斜杠,以替换为每行开头的3个字符块。(以下示例中的PMC、PAJ等) PMC.89569XX/90051XX/90204XX/89533XX/90554XX/90053XX/90215XX/89874XX/89974XX/90481x/90221XX/90508XX/90183XX/88526XX/89843XX/88041x/90446XX/88511x/89574XX/89847XX/88616XX/90513XX/9051xxx/90513XX/89649XX.T

我正在尝试更改一行中的所有斜杠,以替换为每行开头的3个字符块。(以下示例中的PMC、PAJ等)

PMC.89569XX/90051XX/90204XX/89533XX/90554XX/90053XX/90215XX/89874XX/89974XX/90481x/90221XX/90508XX/90183XX/88526XX/89843XX/88041x/90446XX/88511x/89574XX/89847XX/88616XX/90513XX/9051xxx/90513XX/89649XX.T00
.PAJ.77998XX/77896XX.T00 .PAG.78116XX/78104XX/77682XX/07616XX/77663XX/77863XX/07634XX/7808xx/77746XX/78148XX.T00 .PKC.22762x/22358XX/22055XX/22672XX/22684XX/22154XX/22608XX/22768XX/22632XX/22266XX/22714XX/22658XX/22631XX/22288XX/22020XX/2273xx/22269XX/22138XX/22331XX/22387XX/22070XX/22636XX/22629XX/22487XX/22725XX.T00

预期的结果应该是:

PMC.89569xxPMC90051xxPMC90204xxPMC89533xXPMC90554xXPMC90053xxPMC90215xXPMC89874xXPMC89974xXPMC90481xxPMC90221xxPMC90508xXPMC90183xxPMC88526xxPMC89843xXPMC88041xxPMC90446xxPMC8851xxPMC89574xXPMC89847xxPMC88616xxPMC90513xxPMC90015xxPMC90334xxPMC89649xx.T00

我不知道如何做到这一点。 这就是我到目前为止所做的:

 (.)([A-Z]{3})(.)(\/)

我不确定你是否可以只用一个正则表达式,你可能需要分两步来完成。首先,您可以使用
substring()
方法捕获三个大写字母,然后您可以将所有斜杠替换为出现在第一个点后字符开头的三个字母。这是一个JS代码的演示

功能转换行{
var repStr=s.substring(1,4);
var replacedStr=s.replace(//\//g,repStr);
返回replacedStr.substring(1,replacedStr.length);
}
“PMC.89569XX/90051XX/90051XX/90204XX/895333X/90554X X/90053XX/9053XX/90215X X/90215X/8987874X/89874X/8987X/9087X/8989569/89569/89569/89533X/90554X X/9025X/9025X/9025X X/90215X X X X X/9025X X X X X/89515X X X X X/90515X/8951X X X X X X X X/9051X X/8951X X/8951X X/9021X X/9051X X/90515X X X/90515X X X X X X X X X/9051X/905151X X/905151X/90515151515151515151515151515151515151519051515151515151X/90746XX/78148XX.T00“,“.PKC.22762x/22358XX/22055XX/22672XX/22684XX/22154XX/22608XX/2276xx/22632XX/22266XX/22714XX/22658XX/22631XX/22288XX/22020XX/2273xx/22269XX/22138XX/22331XX/22387XX/22070XX/22636XX/22629XX/22487XX/22725XX.T00”];

对于(var i=0;i如果您只计划支持ECMAScript 2018及更新版本,则可以使用单个正则表达式实现所需:

.replace(/(?<=^\.([^.]+)\..*?)\//g, "$1")

您还想删除每行上的第一个点吗?最后是的,第二个点也是一样。您可以只使用正则表达式,但只能使用符合ECMAScript 2018的正则表达式。我正在尝试更改所有斜杠…在每行的开头,但您的代码只适用于一个line@Mohammad:我已经演示了一行,当然可以做到r任意行数。我实际上是在寻找一个只包含正则表达式的解决方案。如果需要多个步骤,这是没有问题的。@QAZ001:使用单个正则表达式似乎是不可能的,因为首先您要捕获一个字符串,然后您要用这三个字符的单词替换斜杠。@Mohammad:我已经将代码嵌入到函数中了并通过一个字符串数组对所有行运行它。希望您也希望如此。谢谢Wiktor,这几乎成功了。除了它只对第一行有效。“PMC”不同时对其他行“PAJ”etc@QAZ001如果必须为多行字符串运行它,请使用
m
修饰符:
s.replace(/(?请参阅,
(?:^\n)在这种情况下,
比使用
m
修饰符的
^
效果更好。几乎但仍然存在缺陷。İt对PAJ来说效果很好。但是,它开始将PAG和PKC更改为PAJ。@QAZ001 it,字符串中的换行符有问题。只需找出它们并添加到
(?:^[\n\r])
模式中即可。