0

如何在 break 后使用 javascript 和 regex 爆炸字符串,<br>后跟以下标签之一</i></div>or </b>

例如,如果我的字符串是:

var string = "Some text<div><br></div>Second part of the text";

或者

var string = "Some text<b><br></b>Second part of the text";

或者

var string = "Some text<i><br></i>Second part of the text";

字符串的输出应该是:

string[0] = "Some text";
string[1] = "Second part of the text";

非常感谢!

4

3 回答 3

1

这个应该工作:

var r = /<i><br><\/i>|<b><br><\/b>|<div><br><\/div>/;
var s = "Some text<i><br></i>Second part of the text";
s.split(r); // ["Some text", "Second part of the text"]
于 2013-09-18T12:16:33.783 回答
0

您正在寻找的正则表达式是这样的:

/<br\/>(?=(?:(?:<\/b>)|(?:<\/i>)|(?:<\/div>)))/

它使用正向前瞻 ( http://www.regular-expressions.info/lookaround.html ) 和非捕获括号。

工作示例:http: //jsbin.com/uGIxUZI/1/edit

PS:您问题中的示例与您的答案不符(</br>而不是<br/>)

于 2013-09-18T11:57:11.910 回答
0

要仅获取文本部分,您可以创建一个虚拟元素并将该文本添加到其中。像这样的东西:

function getText(txt) {   
    var main = document.getElementById('main');  //can also be "document"
    var div = document.createElement('div');     //dummy element
    div.innerHTML = txt;
    main.appendChild(div);
    var c = div.childNodes;
    var arr = [];
    for (var i = 0; i < c.length; i++) {
        if (c[i].nodeType == 3) {         //condition to filter the text nodes
            arr.push(c[i].data);
        }
    }
    main.removeChild(div);             //remove dummy element
    return arr;                        //return array
}

var str = getText("Some text<div></br></div>Second part of the text");
console.dir(str);

工作小提琴

于 2013-09-18T12:03:45.300 回答