之前匹配所有内容并匹配某个角色后的所有内容

时间:2010-07-07 14:16:40

标签: javascript regex

我需要一个正则表达式来匹配之前的所有内容,并且需要匹配某个字符之后的所有内容,例如冒号。

 foo:bar

匹配'foo'的东西和匹配'bar'的东西。

6 个答案:

答案 0 :(得分:7)

不要使用正则表达式。使用split

答案 1 :(得分:2)

这里不需要正则表达式。

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];

答案 2 :(得分:2)

在正则表达式中,您可以定义组(通过括号)。

"foo:bar".match(/(.*?):(.*)/) // -> ["foo:bar", "foo", "bar"]
//                               whole regexp, 1st group, 2nd group
第一组中的

.*?表示.*非贪婪版本,可以防止它吃掉所有字符串(匹配尽可能少. 's)

(在这种情况下这无关紧要,但是当你匹配时很重要,例如“foo:bar:spam”)

答案 3 :(得分:1)

这两个应该这样做:

'foo:bar'.match(/(.*):/)
'foo:bar'.match(/:(.*)/)

字符串中是否会有多个“:”?如果是这样,你可能更喜欢这个:

'foo:bar'.match(/(.*?):/)

答案 4 :(得分:1)

如果要使用正则表达式而不是str.split,可以使用:

var str="foo:bar";
var pattern=/([^:]+):([^:]+)/gi;
var arr=pattern.exec(str);
arr.shift();

现在arr将是一个包含两个元素的数组:['foo','bar']。

答案 5 :(得分:1)

你想要前瞻和后视。哪个匹配的东西后跟或以某个字符开头,而不包括匹配中的该字符。

为了预见,你会有类似。*(?= :),这意味着任何字符,0次或更多次,后跟冒号,但不包括匹配中的冒号,

对于后视,你有。*(?< = :),这意味着任何字符0次或更多次,前面有冒号,但不包括匹配中的冒号。这里的诀窍是后视表达式在其余部分之后出现,这看起来很直观,因为你正在寻找之前的冒号,但这是因为任何正则表达式确实返回一个位置,你想要结肠来就在那个位置之前。