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
答案 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
});