嗨,有一种方法可以使特定文本加粗,例如
我有这个 #boldword,我希望 #boldword2 这两个人像这样大胆。
我有这个词,我希望word2这两个像这样大胆。
因此,正如你所看到的第二个例子,我希望前面有粗体的每个单词都变得粗体,#bold 被删除。
到目前为止我尝试了一些东西
$.fn.wrapInTag = function(opts) {
var tag = opts.tag || 'strong',
words = opts.words || [],
regex = RegExp(words.join('|'), 'gi'),
replacement = '<strong>$&</strong>';
return this.html(function() {
return $(this).text().replace(regex, replacement);
});
};
$('p').wrapInTag({
tag: 'em',
words: ['#boldworld']
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>The #boldworld is big and red.</p>
据我了解,您有一个要加粗的单词列表,其中包含前缀#bold
.您想从单词中删除#bold
前缀吗?
您需要做的就是在文本中添加.replace('#bold', '')
。
编辑
根据您的评论,您想更改正则表达式,使其匹配任何以#bold
开头的字符串并加粗它?
我使用的模式是(#bold([^s.]+))
- 找到任何以#bold
开头的单词,然后捕获所有内容,直到空格或句点([^s.]+)
。整个批次在括号中的原因是为了让整个字符串被替换。我还将替换字符串从$&
更改为$2
.不同之处在于,$&
与$1
相似,因为它将放置整个匹配的字符串(例如#boldworld
(放入文本中;而$2
将放入内部匹配的文本(即它在([^s.]+)
中匹配的文本,例如world
(。
为了我自己的理智,我还从内部函数中删除了jquery调用,并将其替换为vanilla javascript。
"use strict";
$.fn.wrapInTag = function() {
//this = jQuery element
return this.html(function() {
//this = dom element
return this.textContent
.replace(/(#bold([^s.]+))/gi, '<strong>$2</strong>');
});
};
$('p').wrapInTag();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>The #boldworld is big and #boldred.</p>