![](/img/trans.png)
[英]Optional parts in javascript regular expression (with capture groups)
[英]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.'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.