正则表达式,替换两个子字符串之间的括号

时间:2019-12-17 23:27:35

标签: javascript regex

我对Regex不太满意,我试图替换设置字符串中的两个字符。

我需要这个:

This is some variable text
<foo> some stuff <Hello World> other stuff <bar>

要替换为:

This is some variable text
<foo> some stuff (Hello World) other stuff <bar>

编辑:在此示例中,我想找到所有<>,分别在(和{{之间将它们分别替换为)<foo> 1}}。

4 个答案:

答案 0 :(得分:3)

如何使用两个替换。一个用于(<foo>)(.*?)(<bar>),另一个用于what was captured,第二个capturing group的回调函数代替了<(.*?)> with ($1)

s = s.replace(/(<foo>)(.*?)(<bar>)/g, (m0,m1,m2,m3) => m1+m2.replace(/<(.*?)>/g,'($1)')+m3);

See this JS demo at tio.run

对于多行字符串,请使用([\s\S]*?)而不是(.*?)跳过换行符(the dotread more)。

答案 1 :(得分:2)

将此命令与正则表达式一起使用,如下所示:

perl -pe 's/(<foo>.*)<(.*)>(.*<bar>)/$1($2)$3/'

答案 2 :(得分:0)

console.log(`This is some variable text
<foo> some stuff <Hello World> other stuff <bar>`
.replace(/<\w+>|([<>])/g, (m, c) => ({'<':'(', '>':')'}[c] || m)))

答案 3 :(得分:0)

$app->router = new \App\Routing\Router;