我正在尝试获取不在两个字符串字符之间的任何字符串(两个字符串字符之外的任何字符串)。
我尝试了下面的代码,但始终给我“未定义”。
var string = "start<i>ignore text inside here</i>end"
var string = string.match(/[^<i>(.*)<\/i>]/);
console.log(string)
我希望到达这里的是“开始,结束”。但是,每当我运行上面的代码时,结果都是“未定义”。
答案 0 :(得分:2)
这是一个字符类,表示不匹配任何字符<,>i,(,.,*,),/
,并不意味着它将避免匹配完整的句子
[^<i>(.*)</i>]
您可以简单地使用split而不是match
var string = "start<i>ignore text inside here</i>end"
var string = string.split(/<i>.*<\/i>/g);
console.log(string)
答案 1 :(得分:0)
在我看来,您想删除HTML标签和标签内的内容,
在这种情况下,您可以使用此代码,
removeTags(string, array) {
return array ? string.split("<").filter(function (val) { return f(array, val); }).map(function (val) { return f(array, val); }).join("") : string.split("<").map(function (d) { return d.split(">").pop(); }).join("");
function f(array, value) {
return array.map(function (d) { return value.includes(d + ">"); }).indexOf(true) != -1 ? "<" + value : value.split(">")[1];
}
}
在这里,在removeTags方法中, 字符串是您要对其执行操作的字符串。 数组是要删除的特定HTML标记,如果要删除所有HTML标记,则传递null。
*
如果您要执行其他操作,请告诉我。给一个 例子也一样。
*
答案 2 :(得分:0)
如果您的字符串是一行文本(例如您的示例),则可以使用:
let str = "start<i>ignore text inside here</i>end";
str = str.match(/^([a-z]+)<.*?>.*?<.*?>([a-z]+)$/);
console.log(str[1], str[2]);
您也可以将<.*?>.*?<.*?>
替换为<.*?>
并获得相同的结果:
let str = "start<i>ignore text inside here</i>end";
str = str.match(/^([a-z]+)<.*?>([a-z]+)$/);
console.log(str[1], str[2]);
无论哪种方式,两个片段均应输出:
开始结束
祝你好运。