繁体   English   中英

JavaScript Regex捕获并替换可选部分

[英]JavaScript Regex capture and replace for optional parts

我发现很难在JavaScript使用Regex对以下行执行Capture and Replace

// Lines:
This is <span>foo</span>.
This is <span>(Capital) foo</span>.
This is <span>foo (Plural)</span>.
This is <span>(Capital) foo (Plural)</span>.

我需要This is foo. 以上所有。

我尝试为:

var pattern = /<span>(\(Capital\))?\s?(\w+)\s?(\(Plural\))?<\/span>/;

var text1 = "This is <span>foo</span>";
var text2 = "This is <span>(Capital) foo</span>";
var text3 = "This is <span>foo (Plural)</span>";
var text4 = "This is <span>(Capital) foo (Plural)</span>";

text1.replace(pattern, function(_, m){ return m; });
text2.replace(pattern, function(_, m){ return m; });
text3.replace(pattern, function(_, m){ return m; });
text4.replace(pattern, function(_, m){ return m; });

但是它不起作用。

如果<>()之间的内容无关紧要,则:

text.replace(/[<(][^>)]+[>)]/g, '').replace(/ {2,}/g, ' ');

(添加了第二个替换项,确保没有多余的空格留在后面)

您可以使用以下正则表达式,

<span>(?:\(Capital\))?\s*(\w+)\s*(?:\(Plural\))?<\/span>

将匹配的字符替换为组索引1中的字符。

演示

> "This is <span>foo</span>.".replace(/<span>(?:\(Capital\))?\s*(\w+)\s*(?:\(Plural\))?<\/span>/g, '$1');
'This is foo.'
> "This is <span>(Capital) foo</span>.".replace(/<span>(?:\(Capital\))?\s*(\w+)\s*(?:\(Plural\))?<\/span>/g, '$1');
'This is foo.'
> "This is <span>foo (Plural)</span>.".replace(/<span>(?:\(Capital\))?\s*(\w+)\s*(?:\(Plural\))?<\/span>/g, '$1');
'This is foo.'
> "This is <span>(Capital) foo (Plural)</span>.".replace(/<span>(?:\(Capital\))?\s*(\w+)\s*(?:\(Plural\))?<\/span>/g, '$1');
'This is foo.'

您可以将正则表达式修改为:

var r = str.replace(/(?:</?span>| *\((?:Capital|Plural)\)) */gmi, "");

正则演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM