Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式-匹配2个子字符串_Javascript_Regex_Match - Fatal编程技术网

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

Javascript正则表达式-匹配2个子字符串,javascript,regex,match,Javascript,Regex,Match,我不擅长正则表达式,需要一些帮助 我有这样的字符串:data some thing=“5 10 red”。“某些数据”一词是不变的,“事物”会发生变化“事物”也可能包含破折号。双引号中的值仅包含字母数字符号或空格 是否可以仅使用正则表达式获取双引号中的“thing”和值?如果是,那么我应该使用什么表达?我尝试过使用lookarounds,但没有多大成功。您可以使用: var result = data.match(/data-some-(.*?)="(.*?)"/); 结果数组将包含三个元素:

我不擅长正则表达式,需要一些帮助

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

是否可以仅使用正则表达式获取双引号中的“thing”和值?如果是,那么我应该使用什么表达?我尝试过使用lookarounds,但没有多大成功。

您可以使用:

var result = data.match(/data-some-(.*?)="(.*?)"/);
结果数组将包含三个元素:

  • 0:完全匹配(不符合您的兴趣)
  • 1:等号前的可变部分
  • 2:引号之间的值
演示:

var data='data some thing=“5 10 red”';
var result=data.match(/data-some-(.*?)=“(.*?”/);

编写(结果[1]+'
'+结果[2])我理解点和星,但你能解释一下问号在这里是如何工作的吗?谢谢你的回答。我会尽快标记:)问号会影响前一颗星。它把它从一颗贪婪的星星变成了一颗懒惰的星星。实际上,这意味着只要正则表达式能够前进并匹配它后面的模式,它就会这样做(lazy)。如果没有问号,以下数据将以错误的方式拆分:
data some thing=“5 10 red”;其他一些东西=“hallo”
。作为尝试用regexp解析HTML无效的一个小例子,如果属性值是单引号,那么这将失败。如果在等号的两边都有空格,它将失败。如果输入表单
xxx data some
,它将失败。等等。等等。不要用regexp解析HTML。@torazaburo,你完全正确,如果OP确实想在更大的HTML解析上下文中使用它(问题中没有提到),那将是一个坏主意。在DOM中加载它将是一种可行的方法。但是OP谈到了一些字符串……显然(?)这是HTML元素上的数据属性。为什么要在HTML上使用regexp?相反,在HTML元素(或
elt.dataset
)上的属性中搜索正确形式的属性,然后可以直接检索属性值。我会这样做,但我是在使用节点解析字符串,而不是在浏览器中解析文档。抱歉没有完全弄清楚:)这并没有改变你不应该用JS解析HTML的事实。如果有必要,请为节点使用DOM包。如果我理解正确,我应该始终使用DOM解析器来解析HTML,在这种情况下,正则表达式是完全邪恶的?事实上,这说明了这一点。