我正在尝试这样做:
var string = "I am a string with <span class='foo'>tags and stuff</span> as well as words";
return string.split(/(<.*?>)|\s/g);
目标是沿着每个空间分割 \s
,以及任何标签 (<.*?>)
。问题是,我想记住任何标签匹配,所以我把它们放在括号中。问题是,结果还记住字符串中没有有标签的每个部分,从而导致:
["I", undefined, "am", undefined, "a", undefined, "string", undefined, "with", undefined, "", "<span class='foo'>", "tags", undefined, "and", undefined, "stuff", "</span>", "", undefined, "as", undefined, "well", undefined, "as", undefined, "words"]
好吧,那是行不通的。有人知道一种仅在标签实际存在时有条件地记住的方法吗?
最佳答案
我认为不可能只在比赛组实现时才将比赛包括在内。但你可以在不 split
的情况下做到这一点:
return string.match(/<.*?>|[^<\s]+/g);
var string = "I am a string with <span class='foo'>tags and stuff</span> as well as words";
var result = string.match(/<.*?>|[^<\s]+/g);
document.body.insertAdjacentHTML(
"beforeend",
JSON.stringify(result).replace(/</g, "<")
);
body {
font-family: monospace;
}
关于JavaScript 正则表达式 : remember a match without getting `undefined` results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711721/