首页 > 解决方案 > 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),它给了我一个空数组returnnullreturn

标签: javascriptarraysregexstring

解决方案


你的正则表达式是这样形成的,你应该期望结果中有引号。您要求正则表达式解析器查找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="([^"]*)"/


推荐阅读