选择与正则表达式Javascript匹配的文本中的特定字符

时间:2015-12-03 06:30:55

标签: javascript regex

我想从文本中替换字符<>。 我有一个正则表达式如下:

(<span[^>]+class\s*=\s*("|')subValue\2[^>]*>)[^<]*(<\/span>)|(<br(\/*)>)

目标是<br/><br><span class="subValue">......</span>。我想将<>替换为&lt;&gt;

当我用大括号包裹它时,它不会从<>中选择<span><br>。相反,它选择了所有<>

(<|>)(?!(<span[^>]+class\s*=\s*("|')subValue\2[^>]*>)[^<]*(<\/span>)|(<br(\/*)>))

正则表达式有什么问题?

我创建了一个sample here

代码段示例。

&#13;
&#13;
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;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

我将把这个添加到答案中。

(?<=span|br)(<|>)|(<|>)(?=span|br)|(?<="|')>|<(?=\/)

这将匹配;

  
      
  • <>之后发生的所有spanbr
  •   
  • <>之前发生的所有spanbr
  •   
  • >'之后发生的所有"(引用或双引号)
  •   
  • <
  • 之前发生的所有/   

答案 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, '&lt;').replace(/>/g, '&gt;'); }
text = text.replace(regex, replacer);
// display the result
document.body.appendChild(document.createTextNode(text))