Javascript正则表达式 - 匹配2个子字符串

问题描述:

我不是最好的正则表达式,需要一些帮助。Javascript正则表达式 - 匹配2个子字符串

我有这样的字符串:data-some-thing =“5 10 red”。单词'数据一些'是不变的,'事物'变化。 '东西'也可能包含破折号。双引号中的值仅包含字母数字符号或空格。

是否有可能只使用正则表达式得到'东西'和双引号的值?如果是的话,我应该用什么样的表情?我尝试使用lookarounds,但没有太多成功。

+0

显然(?)这是一个HTML元素的数据属性。你为什么试图用HTML上的正则表达式来做任何事情?相反,要搜索HTML元素(或者'elt.dataset')上的属性以获得正确形式的属性,那么可以直接检索属性的值。 – 2016-05-06 13:04:54

+0

我会这样做,但我使用节点解析字符串,而不是浏览器中的文档。对不起,没有完全清楚:) – Thinch

+1

这并不改变你不应该用JS解析HTML的事实。如有必要,请为节点使用DOM包。 – 2016-05-06 13:11:34

你可以使用:

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模块jsdomhtmlparser做到这一点。

+0

我了解点和明星,但您能否向我解释问号在这里的工作原理?谢谢你的答案。要尽快标记它:) – Thinch

+0

问号影响前面的恒星。它从贪婪转变为懒惰的明星。实际上,这意味着只要正则表达式可以继续前进并匹配后面的模式,它就会这样做(懒惰)。如果没有问号,以下数据将以错误的方式分割:'data-some-thing =“5 10 red”;一些其他的东西=“hallo”'。 – trincot

+0

作为尝试使用正则表达式解析HTML的徒劳示例,如果该属性值是单引号的,则将失败。如果等号两边有空格,它将会失败。输入形式为'xxx-data-some-thing'会失败。等等。不要用正则表达式解析HTML。 – 2016-05-06 13:08:24