我正在编写一个NodeJS脚本(使用node命令从CMD启动),它以字符串的形式获取一些HTML内容,其中我需要提取特定<div>
元素之间的一些数据。我很难理解为什么这部分代码没有给予我想要的输出。
const input = '<div class="some_class">Some data</div><div class="some_other_class">< class="some_other_other_class">...</div></div>'
const regex = new RegExp(/<div class="some_class"\>(.*?)<\/div>/g)
let obj = {
'tmp': input.search(regex),
}
console.log(obj) // outputs { tmp: 0}
console.log(input.search(/<div class="some_class"\>(.*?)<\/div>/g)) // outputs 0
const x = input.search(/<div class="some_class"\>(.*?)<\/div>/g)
console.log(x) // outputs 0
我知道这似乎是一个经常性的问题,但我尝试过用字符串格式传递Regex(在单引号之间),将其作为Regex传递(在delimiter /之间),最后定义一个新的RegExp元素,但没有成功。我总是碰巧得到0作为输出。
然而,当我在在线工具上测试它时,它确实匹配并捕获了组#1中的所需数据:https://www.regextester.com/?fam=131034
我不知道我是错过了什么还是做错了什么,但是在这个问题上花了几个小时之后,我很难把我的想法弄清楚。
1条答案
按热度按时间i7uq4tfw1#
String::search()
返回找到的字符串的位置,在您的情况下是0
,这是完全正确的。您需要String::match()
,并且不要忘记获取正确的regexp组索引:为了避免为我喜欢的组而烦恼,有时使用Assert:
如果你的html经常变化,我推荐使用https://www.npmjs.com/package/jsdom来使用DOM访问你需要的标签中的内容。