拆分标签外的文本,也排除标签名称

时间:2015-08-13 04:52:34

标签: javascript regex

regex = /<(\w+)\b[^<>]*>[\s\S]*?<\/\1>/g; 

x="Hello - <phone full="9087456311"> My Number</phone>9087456300<phone full="">9087456311</phone>"; 

splittedText = x.split(regex);

结果:splittedText = [“RSVP - ”,“phone”,“9087456300”,“phone”,“”]

预期:splittedText = [“RSVP - ”,“9087456300”,“”]

在这里,我不希望“手机”作为它的标签名称..我得到的是,正则表达式似乎正确,因为它匹配完美(在这种情况下 - [“我的号码”,“9087456311”])但如果我拆分它,在那个

中给出标签名称(在本例中是电话)

参考我之前的问题: Need regex to find text outside the tags ONLY javascript

2 个答案:

答案 0 :(得分:0)

而不是分裂只是匹配并抓住它。

[^<>]*(?=<(\w+)\b[^<>]*>[\s\S]*?<\/\1>)

参见演示。

https://regex101.com/r/uF4oY4/9

var re = /[^<>]*(?=<(\w+)\b[^<>]*>[\s\S]*?<\/\1>)/gm; 
var str = 'Hello - <phone full="9087456311"> My Number</phone>9087456300<phone full="">9087456311</phone>';
var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

答案 1 :(得分:0)

插入后引用的分割似乎存在一些问题,然后后引用变为空字符串。我不确定为什么会这样。无论如何,这是一个解决方案:

var code = 'gXop8pdsf';
var replaced = x.replace(regex, code);
var splittedText = replaced.split(code);
splittedText = splittedText.filter(function(value) {
  if (value != '') return true; //filters through array to remove empty strings
});