我想从文本中替换字符<
和>
。
我有一个正则表达式如下:
(<span[^>]+class\s*=\s*("|')subValue\2[^>]*>)[^<]*(<\/span>)|(<br(\/*)>)
目标是<br/>
,<br>
,<span class="subValue">......</span>
。我想将<
和>
替换为<
和>
。
当我用大括号包裹它时,它不会从<
或>
中选择<span>
和<br>
。相反,它选择了所有<
和>
。
(<|>)(?!(<span[^>]+class\s*=\s*("|')subValue\2[^>]*>)[^<]*(<\/span>)|(<br(\/*)>))
正则表达式有什么问题?
我创建了一个sample here。
代码段示例。
var str = '-<br><span class="subValue">Value Here<br/>';
regex = new RegExp('(?<=span|br)(<|>)|(<|>)(?=span|br)|(?<="subValue"|\'subValue\')>|<(?=\/)|(?<=br\/)[\s]*>', 'gi');
//str = str.match(regex);
str = str.replace(regex, 'Testing');
$('#lol').html(str);
&#13;
<div id="result" style="border:1px solid red;"></div>
&#13;
答案 0 :(得分:0)
我将把这个添加到答案中。
(?<=span|br)(<|>)|(<|>)(?=span|br)|(?<="|')>|<(?=\/)
这将匹配;
<
或>
之后发生的所有span
或br
- 在
<
或>
之前发生的所有span
或br
>
或'
之后发生的所有"
(引用或双引号)- 之前发生的所有
<
/
答案 1 :(得分:0)
(<|>)(?!(<span…
正则表达式有什么问题?
你不只是用一个大括号包裹它,而是在前面放置一个<|>
模式,然后是一个永不匹配的负向前瞻,特别是因为它寻找另一个 <
。
在这里,我使用了原始的正则表达式,使用替换function执行想要的替换:
text = '\
<span class="subValue"></span>\
<br>\
<br>\
<span class=\'subValue\'>dsa</span>\
<>';
regex = /(<span[^>]+class\s*=\s*("|')subValue\2[^>]*>)[^<]*(<\/span>)|(<br(\/*)>)/g;
function replacer(match) { return match.replace(/</g, '<').replace(/>/g, '>'); }
text = text.replace(regex, replacer);
// display the result
document.body.appendChild(document.createTextNode(text))