Javascript 选择“A”之后的所有文本#&引用;带正则表达式的符号
我使用了一些混合了javascript和正则表达式的jQuery:Javascript 选择“A”之后的所有文本#&引用;带正则表达式的符号,javascript,jquery,regex,Javascript,Jquery,Regex,我使用了一些混合了javascript和正则表达式的jQuery: $(function() { var regExp = new RegExp("\\b(" + "hashtag" + ")\\b", "gm"); var boxLink = "<a class='taglink' onClick='tagBox()'>$1</a>" var html = $('body').html(); $('body').html(html.rep
$(function() {
var regExp = new RegExp("\\b(" + "hashtag" + ")\\b", "gm");
var boxLink = "<a class='taglink' onClick='tagBox()'>$1</a>"
var html = $('body').html();
$('body').html(html.replace(regExp, boxLink));
});
function tagBox() {
alert("It works!")
};
$(函数(){
var regExp=new regExp(“\\b”(“+”hashtag“+”)\\b“,”gm”);
var boxLink=“$1”
var html=$('body').html();
$('body').html(html.replace(regExp,boxLink));
});
函数标记框(){
警报(“它起作用了!”)
};
基本上,只要出现“hashtag”一词,它就会将$1应用到任何地方。Tagbox只会显示一个警告,说明它有效。很简单。我想做的更改是,它不会选择单词“hashtag”,而是选择前面带有“#”符号的所有单词
我如何完成这一点并将其应用到上面的脚本中
提前谢谢 试试这样的东西
var regExp = new RegExp("(#\w+)", "gm");
如果要选择不带#的单词,请将其移动到(首先,$('body').html(html)前面
这是一个非常糟糕的主意。您将重新创建DOM,以前绑定到旧结构中的节点的任何事件侦听器都将不再起作用。逐节点遍历DOM节点是一个更好的主意。类似这样的方法应该可以做到:
// Douglas Crockford's WalkTheDOM
function walkTheDOM(node, func) {
func(node);
node = node.firstChild;
while (node) {
walkTheDOM(node, func);
node = node.nextSibling;
}
}
function esc(text) {
return text.replace(/[&<>"'`]/g, function (chr) {
return '&#' + chr.charCodeAt(0) + ';'
})
}
walkTheDOM(document.body, function (node) {
if (node.nodeType === 3) {
var html = ''
// The even indexes contain the hashtags; the odd indexes contain
// the text that appears between one hashtag and the next.
//
// > 'This post is tagged #javascript and #jquery'.split(/(#\w+)/)
// ["This post is tagged ", "#javascript", " and ", "#jquery", ""]
//
// Text must be escaped before being inserted via `.html()`.
$.each(node.textContent.split(/(#\w+)/), function (idx, text) {
html += idx % 2 ? esc(text) : '<a class="taglink">' + esc(text) + '</a>'
})
$(node).parent().html(html)
}
})
//道格拉斯·克罗克福德的步行区
函数walkTheDOM(节点,func){
func(节点);
node=node.firstChild;
while(节点){
漫游域(节点,函数);
node=node.nextSibling;
}
}
功能esc(文本){
返回文本。替换(/[&“`]/g,函数(chr){
返回“”+chr.charCodeAt(0)+”
})
}
walkTheDOM(document.body、function(node){
if(node.nodeType==3){
var html=''
//偶数索引包含哈希标记;奇数索引包含
//显示在一个标签和下一个标签之间的文本。
//
//>'这篇文章被标记为#javascript和#jquery'。拆分(/(#\w+/)
//[“此帖子已标记”、“#javascript”、“和”、“#jquery”、“”]
//
//文本必须先转义,然后才能通过“.html()”插入。
$.each(node.textContent.split(/(#\w+/),函数(idx,text){
html+=idx%2?esc(文本):“”+esc(文本)+”
})
$(节点).parent().html(html)
}
})
此代码未经测试,无疑存在一些错误,但希望我能说服您,此问题比最初出现的问题更难解决。我喜欢您使其更干净的方法。是的,$('body').html(html)太糟糕了。我试图复制/粘贴你的脚本,但它没有突出显示任何哈希标记,我对它的理解还不够透彻,无法调试。问题是:我决定重新创建DOM。坏主意。回到这里,你比我领先了一步,可能更多。谢谢!标记为答案。酷。(很抱歉,我错过了你之前的评论。)