在某个元素中,我需要选择与某个正则表达式匹配的不同字符串,并用标签包装它们。我怎么能这样做?
我试过了:
var str = jQuery("#my_div").html();
var regex = "\([a-z]{2}\)";
jQuery("#my_div").html(str.replace(regex, "<span>$1</span>"));
..但是这会包裹整个元素而不是元素中的选定字符串。
答案 0 :(得分:5)
您的示例的问题是您没有捕获组,将正则表达式更改为(\([a-z]{2}\))
以下是html中正在运行的正则表达式替换的示例:http://jsfiddle.net/gibble/NYVWg/
<style>span.highlight { color: purple; }</style>
<body>bla bla <div id="test">this (is) some text this (is) some text</div> bla bla<body>
var oldHtml = $('#test').html();
var newHtml = oldHtml.replace(/(\([a-z]{2}\))/g,"<span class='highlight'>$1</span>");
$('#test').html(newHtml);
答案 1 :(得分:2)
鉴于您的正则表达式中包含子表达式,您的代码应该可以正常工作。看看这个jsfiddle:
HTML:
<div id="my_div">foo bar my_regex foo bar</div>
JS:
var str = jQuery("#my_div").html();
var regex = /(my_regex)/;
jQuery("#my_div").html(str.replace(regex, '<span class="red">$1</span>'));
CSS:
.red {
color : red;
}