繁体   English   中英

匹配某个字符之前和之后的所有内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM