查找段落中元素的周围字符

时间:2014-07-02 14:14:31

标签: javascript jquery html regex

我有这个小问题。我需要在段落内的锚标记之前和之后找到前3个字符。

示例:

<p>This is <a href='#' id='lock'>a</a> test for an anchor</p>

我需要得到的结果是:

is  te

其中is(包括末尾的空格)是锚标记中剩下的前3个字符,而te(再次包括开始时的空格)是锚标记中的3个第一个字符。

JQuery可以提供帮助,到目前为止我尝试使用正则表达式和Jquery但没有运气。

我还应该尝试什么?有什么我可能会失踪? 自从我处理前端问题以来已经有一段时间了。

4 个答案:

答案 0 :(得分:1)

使用以下正则表达式捕获锚定标记之前和之后的字符

(.{3})<a href.*?<\/a>(.{3})

DEMO

如果你想用仅捕获的组替换整个,那么你的正则表达式将是,

.*(.{3})<a href.*?<\/a>(.{3}).*

替换将是,

$1$2

DEMO

你的代码就是,

> var str = "<p>This is <a href='#' id='lock'>a</a> test for an anchor</p>";
undefined
> var r = str.replace(/.*(.{3})<a href.*?<\/a>(.{3}).*/g, "$1$2");
undefined
> console.log(r);
is  te
undefined

答案 1 :(得分:1)

尝试使用.contents()来抓取文本节点

var pTag = $('p').contents();
console.log(pTag[0].nodeValue.slice(-3) +
                  pTag[2].nodeValue.substring(0,3)); // "is  te"

DEMO

答案 2 :(得分:1)

像这样的东西

var lock = document.getElementById('lock');
var prev = lock.previousSibling;
var next = lock.nextSibling;

var text = prev.textContent.slice(-3) + next.textContent.slice(0, 3);

FIDDLE

答案 3 :(得分:1)

jQuery和DOM遍历的另一个解决方案:

var a = $("a", "<p>This is <a href='#'>a</a> test for an anchor</p>")[0],
    left = a.previousSibling.nodeValue.slice(-3),
    right = a.nextSibling.nodeValue.slice(0, 3);

console.log(left, right);  // "is " " te"