如何在 HTML 中找到以 space 或 < 结尾的主题标签?
How to find hashtag in HTML which ends with space or <?
我想通过 Regex 在 HTML 中查找主题标签。
<div class="details">
<p>#hashtag1 #hashtag2 #hashtag3</p>
<p>#hashtag4 #hashtag5 #hashtag6</p>
...
</div>
当我使用这个正则表达式时:
var details = $('.details').html();
details = details.replace(/#(\S*)/g,'<a href="/?hashtag=">#</a>');
$('.details').html(details);
它returns:
<div class="details">
<p>
<a href="/?hashtag=hashtag1>#hashtag1</a>
<a href="/?hashtag=hashtag2>#hashtag2</a>
<a href="/?hashtag=hashtag3>#hashtag3</p></a>
...
</div>
我怎样才能得到这个?
<div class="details">
<p>
<a href="/?hashtag=hashtag1>#hashtag1</a>
<a href="/?hashtag=hashtag2>#hashtag2</a>
<a href="/?hashtag=hashtag3>#hashtag3</a>
</p>
...
</div>
你可以使用这个模式/#\w+/g
var input = '<p>#hashtag1 #hashtag2 #hashtag3</p>';
console.log(input.match(/#\w+/g));
\w
表示:单词字符是a-z、A-Z、0-9中的一个字符,包括_(下划线)字符。
更新:
var details = $('.details').html();
details = details.replace(/#(\w+)/g,'<a href="/?hashtag=">#</a>');
$('.details').html(details);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="details">
<p>#hashtag1 #hashtag2 #hashtag3</p>
</div>
更新 2:
var details = $('.details').html();
var pattern = /#([\p{L}\p{N}]+)/gu;
details = details.replace(pattern,'<a href="/?hashtag=">#</a>');
$('.details').html(details);
// for testing
console.log(details.match(pattern));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="details">
<p>#nguyễn1 #nhựt2 #tân3</p>
</div>
@Tân 给了我我想要的答案,但我找到了另一种方法来解决这个问题jQuery。
如果我像这样替换 javascript(jQuery) 部分:
var $targets = $('.details p');
$('.details p').each(function () {
var text = $(this).text();
text = text.replace(/#(\S*)/g,'<a href="/?hashtag=">#</a>');
$(this).html(text);
});
这解决了问题。
我想通过 Regex 在 HTML 中查找主题标签。
<div class="details">
<p>#hashtag1 #hashtag2 #hashtag3</p>
<p>#hashtag4 #hashtag5 #hashtag6</p>
...
</div>
当我使用这个正则表达式时:
var details = $('.details').html();
details = details.replace(/#(\S*)/g,'<a href="/?hashtag=">#</a>');
$('.details').html(details);
它returns:
<div class="details">
<p>
<a href="/?hashtag=hashtag1>#hashtag1</a>
<a href="/?hashtag=hashtag2>#hashtag2</a>
<a href="/?hashtag=hashtag3>#hashtag3</p></a>
...
</div>
我怎样才能得到这个?
<div class="details">
<p>
<a href="/?hashtag=hashtag1>#hashtag1</a>
<a href="/?hashtag=hashtag2>#hashtag2</a>
<a href="/?hashtag=hashtag3>#hashtag3</a>
</p>
...
</div>
你可以使用这个模式/#\w+/g
var input = '<p>#hashtag1 #hashtag2 #hashtag3</p>';
console.log(input.match(/#\w+/g));
\w
表示:单词字符是a-z、A-Z、0-9中的一个字符,包括_(下划线)字符。
更新:
var details = $('.details').html();
details = details.replace(/#(\w+)/g,'<a href="/?hashtag=">#</a>');
$('.details').html(details);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="details">
<p>#hashtag1 #hashtag2 #hashtag3</p>
</div>
更新 2:
var details = $('.details').html();
var pattern = /#([\p{L}\p{N}]+)/gu;
details = details.replace(pattern,'<a href="/?hashtag=">#</a>');
$('.details').html(details);
// for testing
console.log(details.match(pattern));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="details">
<p>#nguyễn1 #nhựt2 #tân3</p>
</div>
@Tân 给了我我想要的答案,但我找到了另一种方法来解决这个问题jQuery。
如果我像这样替换 javascript(jQuery) 部分:
var $targets = $('.details p');
$('.details p').each(function () {
var text = $(this).text();
text = text.replace(/#(\S*)/g,'<a href="/?hashtag=">#</a>');
$(this).html(text);
});
这解决了问题。