如何使用javascript正则表达式删除部分字符串而不重复分隔字符串

如何使用javascript正则表达式删除部分字符串而不重复分隔字符串,javascript,regex,string,Javascript,Regex,String,当未知子字符串出现在两个已知子字符串(和)之间时,我想删除它。例如,我想转换: hello <foo>remove me</foo> 你好,请删除我 致: 你好 我可以用: s = ... s.replace(/<foo>.*?<\/foo>/, '<foo></foo>') s=。。。 s、 替换(/.*?/,'') 但是我想知道是否有一种方法可以在不重复正则表达式和替换文本中的已知子字符串(和)的情况下执行此操

当未知子字符串出现在两个已知子字符串(
)之间时,我想删除它。例如,我想转换:

hello <foo>remove me</foo>
你好,请删除我
致:

你好 我可以用:

s = ...
s.replace(/<foo>.*?<\/foo>/, '<foo></foo>')
s=。。。
s、 替换(/.*?/,'')

但是我想知道是否有一种方法可以在不重复正则表达式和替换文本中的已知子字符串(
)的情况下执行此操作。

您可以在
捕获的组中捕获标记
,稍后将其用作反向引用:

var repl = s.replace(/<(foo)>.*?<\/\1>/, '<$1></$1>');
//=> hello <foo></foo>
var repl=s.replace(/.*?/,“”);
//=>你好
\1
$1
是对捕获组的反向引用


尝试使用分组在正则表达式下面

(?:<foo>)(.*?<\/foo>)
(?:)(*

图示:

示例代码:

var re = /(?:<foo>)(.*?<\/foo>)/;
var str = 'hello <foo>remove me</foo>';
var subst = '<foo></foo>';

var result = str.replace(re, subst);
var re=/(?:)(.*)/;
var str='hello remove me';
var subst='';
var结果=str.replace(re,subst);
输出:

hello <foo></foo>
你好
你们真是太棒了。谢谢只是问问而已。它是否适用于
?干净高效,+1:)非常感谢!我希望我能接受这两个答案。选择一个更有效的解决问题。我不知道哪一个更有效。@Braj:您的模式唯一的问题是,它将失败,因为它将匹配整个字符串,而不是
abcdefg
,因为量词
*
是贪婪的。关于,regex101步骤(或regexbuddy步骤):查看使模式成功或失败需要多少步骤是很有用的。但是请记住,这些信息并不总是与实际的模式性能相关。唯一能确定的方法是一个计时器。@Braj:是的,如果你让量词变懒,它会工作的。但是对于长字符串,懒惰的量词比贪婪的量词慢。@Braj:没问题,正则表达式不容易。有很多概念需要掌握,顺序如下:字符类、贪婪/懒惰、回溯、原子/所有格、查找、捕获/回溯引用/子模式/命名模式、递归、回溯控制动词。。。
hello <foo></foo>