Javascript正则表达式 - 匹配2个子字符串
我不是最好的正则表达式,需要一些帮助。Javascript正则表达式 - 匹配2个子字符串
我有这样的字符串:data-some-thing =“5 10 red”。单词'数据一些'是不变的,'事物'变化。 '东西'也可能包含破折号。双引号中的值仅包含字母数字符号或空格。
是否有可能只使用正则表达式得到'东西'和双引号的值?如果是的话,我应该用什么样的表情?我尝试使用lookarounds,但没有太多成功。
你可以使用:
var result = data.match(/data-some-(.*?)="(.*?)"/);
结果阵列将具备三个要素:
- 0:完全匹配(不是你的兴趣)
- 1:变量前面的部分等号
- 2:引号之间的值。
演示:
var data = 'data-some-thing="5 10 red"';
var result = data.match(/data-some-(.*?)="(.*?)"/);
document.write(result[1] + '<br>' + result[2]);
免责声明:
请注意,如果你是在较大的HTML解析的情况下这样做(它没有提及问题),你不应该使用正则表达式。相反,你应该使用HTML字符串加载到DOM,并使用DOM方法来查找属性名称和值对你感兴趣的内容。
对于Node.js的可以使用npm模块jsdom和htmlparser做到这一点。
我了解点和明星,但您能否向我解释问号在这里的工作原理?谢谢你的答案。要尽快标记它:) – Thinch
问号影响前面的恒星。它从贪婪转变为懒惰的明星。实际上,这意味着只要正则表达式可以继续前进并匹配后面的模式,它就会这样做(懒惰)。如果没有问号,以下数据将以错误的方式分割:'data-some-thing =“5 10 red”;一些其他的东西=“hallo”'。 – trincot
作为尝试使用正则表达式解析HTML的徒劳示例,如果该属性值是单引号的,则将失败。如果等号两边有空格,它将会失败。输入形式为'xxx-data-some-thing'会失败。等等。不要用正则表达式解析HTML。 – 2016-05-06 13:08:24
显然(?)这是一个HTML元素的数据属性。你为什么试图用HTML上的正则表达式来做任何事情?相反,要搜索HTML元素(或者'elt.dataset')上的属性以获得正确形式的属性,那么可以直接检索属性的值。 – 2016-05-06 13:04:54
我会这样做,但我使用节点解析字符串,而不是浏览器中的文档。对不起,没有完全清楚:) – Thinch
这并不改变你不应该用JS解析HTML的事实。如有必要,请为节点使用DOM包。 – 2016-05-06 13:11:34