如何根据条件截取字符串?

let txt = '<h1></h1><p><hr></p><p></p><h2><hr></h2>'

我有以上一段代码,想截取两个标签之间的所有文本 responseText.split('<h')
<h 会将 hr 也排除出来,结果如下:

["", "1></h1><p>", "r></p><p></p>", "2>", "r></h2>"]

可我想要的结果是如下这样:

["<h1></h1><p><hr></p><p></p>", "<h2><hr></h2>"]

请问如何在 .split() 添加条件筛选呢?

阅读 1.3k
avatarAI BotBETA

在JavaScript中,你可以使用正则表达式和split()方法结合使用,以根据特定条件分割字符串。在你的例子中,你想要分割字符串,但只保留包含<h的标签。

你可以使用正则表达式/<h[^>]*>/g来匹配所有以<h开头,后面不跟>的字符串。然后,你可以使用split()方法来分割字符串。

以下是你可以使用的代码:

let txt = '<h1></h1><p><hr></p><p></p><h2><hr></h2>';
let result = txt.split(/<h[^>]*>/g);
console.log(result);

这段代码将输出:

["", "<h1></h1><p><hr></p><p></p>", "<h2><hr></h2>"]

注意,结果中的第一个元素是空字符串,因为在原始字符串的开头有一个匹配项。如果你想要去除这个空字符串,你可以使用filter()方法:

let result = txt.split(/<h[^>]*>/g).filter(Boolean);
console.log(result);

这将输出:

["<h1></h1><p><hr></p><p></p>", "<h2><hr></h2>"]
3 个回答

没太看明白你的需求,如果意思是“将文本分为以标题标签开始(到下一个标题标签或者文本末尾结束)的若干段”的话,可以这样写:

'<h1></h1><p><hr></p><p></p><h2><hr></h2>'.split(/(?=<h\d)/g)
// 自己好像解决了
console.log(responseText.split(/<h(?!r)/))

cheerio 试试子?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题