2012-10-10 24 views
3

在某个元素中,我需要选择与某个正则表达式匹配的不同字符串,并用标签包装它们。我怎样才能做到这一点 ?jQuery:包装匹配正则表达式的字符串

我想:

var str = jQuery("#my_div").html(); 
var regex = "\([a-z]{2}\)"; 
jQuery("#my_div").html(str.replace(regex, "<span>$1</span>")); 

..但这个包装整个元素,而不是元素中选择的字符串。

+1

我们需要看到你的正则表达式,以及一些示例HTML能够帮助你。 1美元的价值可能不是你认为的价值。 – CaffGeek

+0

好的。我相应编辑。 – drake035

+0

我更新了我的答案,但问题是你的正则表达式没有捕获'()',只是在整个事物中添加一些括号,所以它是'(\([az] {2} \))' – CaffGeek

回答

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);​ 
+0

有问题与此代码。如果添加更多的模式实例(例如:“this(is)some some text this(is)some text this(is)some text”),它只会选择第一个! – drake035

+0

@ drake035,通过将字母g添加到正则表达式(适用于全球)易于修复 – CaffGeek

+0

作品,thx man! – drake035

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; 
}​ 
相关问题