Javascript中的正则表达式匹配返回原始字符串
我正试图使用Javascript正则表达式以这种方式选择一些东西:Javascript中的正则表达式匹配返回原始字符串,javascript,regex,Javascript,Regex,我正试图使用Javascript正则表达式以这种方式选择一些东西:!某物:某物感叹号、冒号和分号必须在那里,但其他部分可以是任何值。我试图这样做: "!test: value; random text here !another: valueagain;".match(/!(.*):(.*);/g); 这将返回原始字符串,!测试:数值;随机文本在这里!另一个:再一次。是我做的不对,还是正则表达式不正确 正如devnull所建议的,使用非贪婪量词 "!test: value; random te
!某物:某物代码>感叹号、冒号和分号必须在那里,但其他部分可以是任何值。我试图这样做:
"!test: value; random text here !another: valueagain;".match(/!(.*):(.*);/g);
这将返回原始字符串,!测试:数值;随机文本在这里!另一个:再一次代码>。是我做的不对,还是正则表达式不正确 正如devnull所建议的,使用非贪婪量词
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
输出:
[ '!test: value;', '!another: valueagain;' ]
一般来说,像*
这样的正则表达式量词是贪婪的,因为它们会尝试匹配尽可能大的表达式
非贪婪版本的*?
将只匹配它们需要匹配的数量。正如devnull所建议的,使用非贪婪量词
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
输出:
[ '!test: value;', '!another: valueagain;' ]
一般来说,像*
这样的正则表达式量词是贪婪的,因为它们会尝试匹配尽可能大的表达式
非贪婪版本的*?
将只匹配它们需要匹配的数量。正如devnull所建议的,使用非贪婪量词
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
输出:
[ '!test: value;', '!another: valueagain;' ]
一般来说,像*
这样的正则表达式量词是贪婪的,因为它们会尝试匹配尽可能大的表达式
非贪婪版本的*?
将只匹配它们需要匹配的数量。正如devnull所建议的,使用非贪婪量词
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
输出:
[ '!test: value;', '!another: valueagain;' ]
一般来说,像*
这样的正则表达式量词是贪婪的,因为它们会尝试匹配尽可能大的表达式
非贪婪版本将只匹配所需的匹配量。如果您使用贪婪匹配器,请像这样使用非贪婪匹配器
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
# [ '!test: value;', '!another: valueagain;' ]
(.*):
消耗所有内容,直到字符串中的最后一个:
,因为它是贪婪的。这就是为什么您只能得到一个字符串。只需使用?
,像这样*?
使其不贪婪即可。这确保它匹配到第一个:
您使用的是贪婪匹配器,请像这样使用非贪婪匹配器
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
# [ '!test: value;', '!another: valueagain;' ]
(.*):
消耗所有内容,直到字符串中的最后一个:
,因为它是贪婪的。这就是为什么您只能得到一个字符串。只需使用?
,像这样*?
使其不贪婪即可。这确保它匹配到第一个:
您使用的是贪婪匹配器,请像这样使用非贪婪匹配器
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
# [ '!test: value;', '!another: valueagain;' ]
(.*):
消耗所有内容,直到字符串中的最后一个:
,因为它是贪婪的。这就是为什么您只能得到一个字符串。只需使用?
,像这样*?
使其不贪婪即可。这确保它匹配到第一个:
您使用的是贪婪匹配器,请像这样使用非贪婪匹配器
"!test: value; random text here !another: valueagain;".match(/!(.*?):(.*?);/g);
# [ '!test: value;', '!another: valueagain;' ]
(.*):
消耗所有内容,直到字符串中的最后一个:
,因为它是贪婪的。这就是为什么您只能得到一个字符串。只需使用?
,像这样*?
使其不贪婪即可。这确保它匹配到第一个:
试试这个:
.match(/!(.*?):(.*?);/g);
添加的问号使*
不贪婪,这意味着它匹配尽可能短的字符串。尝试以下操作:
.match(/!(.*?):(.*?);/g);
添加的问号使*
不贪婪,这意味着它匹配尽可能短的字符串。尝试以下操作:
.match(/!(.*?):(.*?);/g);
添加的问号使*
不贪婪,这意味着它匹配尽可能短的字符串。尝试以下操作:
.match(/!(.*?):(.*?);/g);
添加的问号使*
不贪婪,这意味着它匹配尽可能短的字符串。尝试以下表达式:
"!test: value; random text here !another: valueagain;".match(/![^!]*:[^!]*;/g);
返回:
["!test: value;", "!another: valueagain;"]
尝试以下表达式:
"!test: value; random text here !another: valueagain;".match(/![^!]*:[^!]*;/g);
返回:
["!test: value;", "!another: valueagain;"]
尝试以下表达式:
"!test: value; random text here !another: valueagain;".match(/![^!]*:[^!]*;/g);
返回:
["!test: value;", "!another: valueagain;"]
尝试以下表达式:
"!test: value; random text here !another: valueagain;".match(/![^!]*:[^!]*;/g);
返回:
["!test: value;", "!another: valueagain;"]
整个字符串都与正则表达式匹配,所以你做得对,只是没有做你认为你在做的事情。你的预期输出是什么,你能分享吗?使用非贪婪量词。@Denim希望我能得到一个匹配数组。显然情况并非如此。它只返回一个带有原始字符串的数组。在这个例子中,什么是真正的返回数组?整个字符串与正则表达式匹配,所以你做得对,只是没有做你认为你在做的事情。你的预期输出是什么,你能分享一下吗?使用非贪婪量词。@Denim希望我能得到一系列匹配。显然情况并非如此。它只返回一个带有原始字符串的数组。在这个例子中,什么是真正的返回数组?整个字符串与正则表达式匹配,所以你做得对,只是没有做你认为你在做的事情。你的预期输出是什么,你能分享一下吗?使用非贪婪量词。@Denim希望我能得到一系列匹配。显然情况并非如此。它只返回一个带有原始字符串的数组。在这个例子中,什么是真正的返回数组?整个字符串与正则表达式匹配,所以你做得对,只是没有做你认为你在做的事情。你的预期输出是什么,你能分享一下吗?使用非贪婪量词。@Denim希望我能得到一系列匹配。显然情况并非如此。它只返回一个带有原始字符串的数组。在这个示例中,什么是真正的返回数组?谢谢,这似乎有效。我将把这个标记为答案。谢谢,这似乎有效。我将把这个标记为答案。谢谢,这似乎有效。我将把这个标记为答案。谢谢,这似乎有效。我将把这作为答案。