Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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正则表达式,帮我匹配_Javascript_Regex_Match - Fatal编程技术网

Javascript正则表达式,帮我匹配

Javascript正则表达式,帮我匹配,javascript,regex,match,Javascript,Regex,Match,伙计们,请帮帮我。我不知道如何使用正则表达式,我读了很多关于这方面的书,但无论如何,我不明白它是如何工作的 这是我的问题: 我有这样的代码: var str = "<strong>What do you think</strong> if we could just buy this <strong>Robot</strong>"; str = str.match(/[<strong>][a-z\s]+[<\/strong>

伙计们,请帮帮我。我不知道如何使用正则表达式,我读了很多关于这方面的书,但无论如何,我不明白它是如何工作的

这是我的问题: 我有这样的代码:

var str = "<strong>What do you think</strong> if we could just buy this <strong>Robot</strong>"; 
str = str.match(/[<strong>][a-z\s]+[<\/strong>]/gi);
var str=“如果我们能买这个机器人,你觉得怎么样;
str=str.match(/[][a-z\s]+[]/gi);

代码完成后,我得到如下结果:>你认为机器人怎么样试试这个正则表达式[更新]

(<strong>(.*?)</strong>)*
(.*))*

大多数(现代)regex方言都是这样做的

.*?(?<=<strong>)(.*?)(?=</strong>).*?|.*

不幸的是,Javascript不支持lookback。如果你愿意,你可以阅读并尝试一下。可惜js不支持如此强大的技术

如果您不想对
RegExp.exec()
大惊小怪,请使用以下方法:

var matches = str.match(/<strong>.*?<\/strong>/gi);
var result = [];
for (var i = 0; i < matches.length; ++i)
    result.push(matches[i].match(/<strong>(.*)<\/strong>/i)[1]);
var matches=str.match(/*?/gi);
var结果=[];
对于(变量i=0;i(.*)/i)[1]);

您可能更想要
.exec
,因为如果您想要regexp,则不应将
包括在匹配中。为了阅读的乐趣:。在regex中,
[]
表示“这些字符中的任何一个”,因此
[]
表示“
谢谢,它能工作,但不管怎样,我有了:机器人取而代之的是:机器人。或者我不能去掉这些标签?不幸的是,它不起作用。我经常得到同样的东西,加上现在我得到了很多逗号(从我的文本),这不是他想要的。他只需要标签之间的文本。是的,Rocket是对的,我只需要标签之间的文本。当我使用replace时——它不起作用,我不知道为什么,在我把我的问题发布到这里之前,我一直试图使用replace作为结果,但它出了问题。只是因为,我没有得到结果,在我使用“替换”之后是的!!!最后哇!它起作用了。我现在真的很高兴。谢谢。你能一步一步地解释一下这个逻辑吗?我会很感激的,当然。第一个非贪婪的匹配器提取所有
标记(
有助于避免贪婪匹配:
-此字符串匹配另一个答案中建议的
/
g
(全局)标志提供数组中的所有匹配项(一个示例)。现在,您只需使用贪婪匹配在循环中提取
标记内容,就像其他答案建议的那样。这太棒了。在您的帮助下,我在Javascript的正则表达式中迈出了一小步。
var matches = str.match(/<strong>.*?<\/strong>/gi);
var result = [];
for (var i = 0; i < matches.length; ++i)
    result.push(matches[i].match(/<strong>(.*)<\/strong>/i)[1]);