如何用跨度替换给定偏移处的字符串(字符串可以重叠)?

时间:2014-07-01 13:27:20

标签: javascript jquery css regex html5

我正在尝试用具有各种特征的标签替换字符串中的某些单词。假设我有以下句子:

{ Lorem [ ipsum ] } dolor sit amet, consetetur [ sadipscing ] elitr.

结果应如下:

<span>Lorem <span>ipsum</span></span> dolor sit amet, consetetur <span>sadipscing</span> elitr.

我一直在尝试根据每个字符串的起始索引进行排序,并以相反的顺序替换它们,但这种方法仍不适用于重叠字符串。

请你帮忙创建一个能做到这一点的javascript函数吗?

谢谢你, 尼克

编辑:

括号仅用于演示,我实际拥有的是我需要用跨度包围的弦的偏移量。例如,我有以下偏移数组:[0, 4], [0, 10]

3 个答案:

答案 0 :(得分:1)

使用Javascript的replace()方法,将多个替换级联在一起。

var str  = '{ Lorem [ ipsum ] } dolor sit amet, consetetur [ sadipscing ] elitr.'
var repl = str.replace(/[[{]/g, '<span>').replace(/[\]}]/g, '</span>');

Working Demo

答案 1 :(得分:0)

如果您确定括号是平衡的(否则您将获得未封闭的span标签或孤立的结束标签),您可以使用:

var result = str.replace(/[{[]|([\]}])/g, function (_, g1) {
    if (g1 == undefined) return '<span>';
    return '</span>';
});

答案 2 :(得分:0)

如果你想严格找到成对的括号并将它们包起来:

var string = "{ Lorem [ ipsum ] } dolor sit amet, consetetur [ sadipscing ] elitr.";
var _curly = /\{([\W,\w]+)\}/g;
var _square = /\[([\w ]+)\]/g;

var result = string.replace(_curly, "<span>$1</span>").replace(_square , "<span>$1</span>");