javascript - Javascript Regex 问题在引号内返回内容
问题描述
我需要遍历一个html数组并返回ID,例如['<div id="menu"></div>']
需要返回'menu'
,['<div id="online-menu">A La Carte</div>', '<div id="red-box">Welcome to the site</div>','<div id="hello">Hello</div>']
会返回['online-menu', 'red-box', 'hello']
到目前为止,我的代码是:
const getID = divs => {
const regex = /"[^"]*"/g
let returnedString = ''
while(returnedString = regex.exec(divs))
return returnedString
所以我目前收到以下错误:
AssertionError:预期 [ Array(1) ] 深度等于 [ 'online-menu' ]
+ 预期 - 实际[
- "\"在线菜单\""
+ "在线菜单"
]
有没有人能给我一个正确的方向,我已经尝试过,如果在语句之前使用并且在语句中使用时.slice(1, -1)
,它给了我一个空数组return
null
return
解决方案
你的正则表达式是这样形成的,你应该期望结果中有引号。您要求正则表达式解析器查找a string that starts with a quote, with any character other than a quote, that ends in a quote
. 该规格与您返回的内容完美匹配。
您应该使用正则表达式组来区分您的关注点。您要做的是匹配引用的字符串,但仅针对其中的文本。
const getID = divs => {
//lets assume that divs is a single string
const regex = /"([^"]*)"/
let matched = divs.match(regex);
let returnedString = matched[1];
return returnedString;
}
如果 divs 应该是一个 html 字符串数组,那么只需将此函数弹出到数组映射中。或者使用相同的逻辑在函数内部迭代它们。
此外,如果您特别想要 ID,您应该考虑所有 html 属性都以您提供的正则表达式的形式出现,这意味着由于您正在进行全局匹配,您将返回所有这些属性。
您应该考虑专门针对 id,例如regex = /id="([^"]*)"/
推荐阅读
- c++ - 在 Howard Hinnant 的 Date 库中获取毫秒舍入时间戳字符串的最佳方法是什么?
- macos-catalina - /System/Volumes/Data 在 Mac OS Catalina 上占用了太多空间
- kubernetes - 注册新的 istioctl 配置文件
- r - 日期和国家的 PCA
- python - 有什么方法可以将保存在 gdrive 上的 .xlsx 导入到带有 python 的 gsheet 中?
- python - 使用关键字参数 '{'pk': ''}' 反转'remove'
- git - git status 将未修改的文件显示为已修改,并且 git diff 无法对它们进行哈希处理
- javascript - 我无法从 axios 请求返回响应
- delphi - 在 C++ Builder 中搜索没有可视组件的内存中的文本
- amazon-web-services - AWS 可以接受从休眠状态到请求的延迟是多少?