2015-06-26 46 views
2

我想将所有大写字母和撇号定位到一个html字符串,并省略所有的html标签。事实上,两个ra子之间的内容瞄准是不可取的,因为它会导致错误。正则表达式jQuery:找到大写字母并忽略html标签

串的例子的问题:

实施例1:

Test Drop Cap with a <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes">Link</a> & a <span style="color:#777">Span</span> and more text<a href="#index-anchor" class="anchor"></a> 

实施例2:

Test Drop Cap with a <a href="https://github.com/Scriptura/Scriptura">Link</a> and that's it 

预期输出是:

实施例1:

<span class="letter">T</span>est <span class="letter">D</span>rop <span class="letter">C</span>ap with a <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes">Link</a> & a <span style="color:#777"><span class="letter">S</span>pan</span> and more text<a href="#index-anchor" class="anchor"></a> 

例2:

<span class="letter">T</span>est <span class="letter">D</span>rop <span class="letter">C</span>ap with a <a href="https://github.com/Scriptura/Scriptura"><span class="letter">L</span>ink</a> and that's it 

现在我做到这一点:

(function($){ 
    $.fn.letter = function(){ 
     $(':header, legend, .h1, .h2, .h3, .h4, .h5, .h6, .addletter').each(function(){ 
      var string = $(this); 
      var newString = string.html().replace(/(<([^>]+)>|[A-Z«»"]|&amp;)/gm, '<span class="letter">$1</span>'); 
      string.html(newString); 
     }); 
    }; 
    $('.letter').letter(); 
})(jQuery); 

但我的正则表达式是不完美:它也是针对两个标记之间的内容。你能帮我做一个更好的正则表达式吗?谢谢。

+0

@阿维纳什拉吉:谢谢你的澄清请求。我刚刚更新了我的帖子。 –

回答

1

您可以使用这种基于负面预测的正则表达式。

string.replace(/([A-Z])(?![^<>]*>)/g, '<span class="letter">$1</span>'); 

DEMO

var s = 'Test Drop Cap with a <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes">Link</a> & a <span style="color:#777">Span</span> and more text<a href="#index-anchor" class="anchor"></a>'; 
 
alert(s.replace(/([A-Z])(?![^<>]*>)/g, '<span class="letter">$1</span>'))

+1

谢谢。这正是我寻找的解决方案! –

+1

不客气..如果您发布了预期的输出结果,您应该在20分钟之前获得解决方案。 –

+0

我想未来,谢谢。 –