找到字符串出现并用span包装它

时间:2013-08-31 05:59:35

标签: javascript jquery regex dom

<div id="wrapper">
  <div>if(true)<span class="openParen bm1">{</span></div>
  <div>cout<<"hey";cin>>x;</div>
  <div><span class="closeParen bm1>}</span></div>
</div>

我想使用正则表达式查找cout,例如/cout[^;]*;/,然后用span包装。

<div id="wrapper">
  <div>if(true)<span class="openParen bm1">{</span></div>
  <div><span id="group">cout<<"hey";</span>cin>>x;</div>
  <div><span class="closeParen bm1>}</span></div>
</div>

我如何找到正则表达式并用跨度包裹它?有人请?

更新:我在cin>>x;之后插入了cout,不应该包裹cin。

我想用这样的东西

text.replace(/(cout[^;]*;)/g, '<span class="group">$1</span>');

但我不知道如何在DOM中应用它。任何人吗?

对于cin&gt;&gt;

BUG 和cout&lt;&lt;,他们不能包裹直到; http://jsfiddle.net/3N4AE/11/

3 个答案:

答案 0 :(得分:1)

更新正则表达方式 DEMO

$('#wrapper div').filter(':contains("cout")').each(function () {
    var x = $(this);
    var txt = x.text();
    x.html(txt.replace(/(cout[^;]*;)/g, '<span class="group">$1</span>'));
});

DEMO

var x =$('#wrapper div').filter(':contains("cout")');
var txt = x.text();
x.text('').append('<span id="group">'+txt+'</span>');
OP更新问题后

更新

DEMO

var x = $('#wrapper div').filter(':contains("cout")');
var txt = x.text();
x.text('');
var cout = txt.split(';');
$.each(cout, function (i, val) {
    if (val.indexOf('cout') > -1) {
        x.append('<span class="group">' + val + ';</span>');
    } else {
        x.append(val + ';');
    }
});

更新

DEMO

$('#wrapper div').filter(':contains("cout")').each(function () {
    var x = $(this);
    var txt = x.text();
    x.text('');
    var cout = txt.split(';');
    $.each(cout, function (i, val) {
        if (val.indexOf('cout') > -1) {
            x.append('<span class="group">' + val + ';</span>');
        } else {
            x.append(val + ';');
        }
    });
});

koala-dev评论

之后更新

DEMO

$('#wrapper div').filter(':contains("cout")').each(function () {
    var x = $(this);
    var txt = x.text();
    x.text('');
    var cout = txt.split(';');
    $.each(cout, function (i, val) {
        if (val.indexOf('cout') > -1) {
            x.append('<span class="group">' + val + ';</span>');
        } else if ($.trim(val) != '') {
            x.append(val + ';');
        }
    });
});

答案 1 :(得分:1)

这是使用jQuery将正则表达式应用于DOM的方法:

$('#wrapper div').filter(':contains("cout")').each(function () {
    $(this).html($(this).text().replace(/(cout[^;]*;)/g, '<span class="group">$1</span>'));
});

<强> Demo fiddle

答案 2 :(得分:-2)

这应该有帮助

var pattern = /cout[^;]*;/;

var txt = $('#wrapper').find('div:nth-child(2)').text();
var el = $('#wrapper').find('div:nth-child(2)');

$(el).text("").append('<span id="group">' + txt + '</span');

jsfiddle