[英]match everything before and match everything after a certain character
我需要一个正则表达式来匹配某个字符(例如冒号)之前的所有内容,再匹配一个字符之后的所有内容。
foo:bar
匹配“ foo”的东西和匹配“ bar”的东西。
不要为此使用正则表达式。 使用split 。
在正则表达式中,您可以定义组(通过括号)。
"foo:bar".match(/(.*?):(.*)/) // -> ["foo:bar", "foo", "bar"]
// whole regexp, 1st group, 2nd group
.*?
第一组表示.*
非贪婪版本,它防止通过它吃掉所有字符串(尽可能少地匹配.
)。
(在这种情况下,这实际上并不重要,但是在您进行匹配时很重要,例如“ foo:bar:spam”)
您在这里不需要正则表达式。
var middle = str.indexOf(':');
var key = str.substr(0, middle);
var value = str.substr(middle + 1);
如果您确实想使用正则表达式,则可以这样做:
var matches = /([^:]+):(.+)/.exec(str);
var key = matches[1];
var value = matches[2];
这两个应该做到:
'foo:bar'.match(/(.*):/)
'foo:bar'.match(/:(.*)/)
字符串中是否会有多个“:”? 如果是这样,您可能更喜欢以下一种:
'foo:bar'.match(/(.*?):/)
如果要使用正则表达式而不是str.split,则可以使用:
var str="foo:bar";
var pattern=/([^:]+):([^:]+)/gi;
var arr=pattern.exec(str);
arr.shift();
现在,arr将是两个元素的数组:['foo','bar']。
您想向前看,向后看。 哪个匹配项后面或某个字符之前,但不包含该字符。
对于前瞻,您将使用。*(?= :)之类的东西,这表示0次或多次的任意字符,后跟一个冒号,但比赛中请勿包含冒号,
对于后向而言,您具有。*(?<= :),这意味着0或更多次的任何字符都以冒号开头,但在比赛中不要包含冒号。 这里的诀窍是,后面的表达式在其余表达式之后出现,这似乎是反直观的,因为您正在寻找之前的冒号,但这是因为任何正则表达式确实返回了位置,并且您希望冒号出现就在那个位置之前
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.