正则如何匹配某字符之后的内容
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则如何匹配某字符之后的内容相关的知识,希望对你有一定的参考价值。
有多行文字,想匹配第一个 # 号和后面的所有内容,之后可能还会出现 # 号,可以忽略:
第一行
第二行
#从这里开始匹配
第N行
第N行
#还会出现#号
\ :转义字符
. :位匹配符,一个代表一位
0,:代表0个或多个 参考技术B 你想要的正则表达式应该是:#[\s\S]+本回答被提问者采纳
匹配之前的所有内容并匹配某个字符之后的所有内容[重复]
【中文标题】匹配之前的所有内容并匹配某个字符之后的所有内容[重复]【英文标题】:match everything before and match everything after a certain character [duplicate] 【发布时间】:2011-03-12 20:33:39 【问题描述】:我需要一个正则表达式来匹配之前的所有内容,一个匹配某个字符之后的所有内容,例如冒号。
foo:bar
匹配 'foo' 的东西和匹配 'bar' 的东西。
【问题讨论】:
【参考方案1】:不要为此使用正则表达式。使用split。
【讨论】:
split
如果值有 :
将失败。
它不会返回整个值。
@SLaks 您还必须向":"
提供split
参数:)
SLaks 想说的是,如果:
之后的字符串部分还包含冒号,则结果将包含 3 个子字符串。这不符合问题的标准,“我需要一个正则表达式来匹配之前的所有内容,一个来匹配 某个字符之后的所有内容,比如冒号”。但是,OP 很可能有点天真地指定了该要求,split
对他来说已经足够了:-)【参考方案2】:
在正则表达式中,您可以定义组(通过括号)。
"foo:bar".match(/(.*?):(.*)/) // -> ["foo:bar", "foo", "bar"]
// whole regexp, 1st group, 2nd group
.*?
in first group 表示 non-greedy 版本的.*
,这可以防止它吃掉所有的字符串(尽可能少匹配.
's)
(在这种情况下确实无关紧要,但在匹配时很重要,例如“foo:bar:spam”)
【讨论】:
【参考方案3】:这里不需要正则表达式。
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];
【讨论】:
+1 用于满足冒号前后所有内容的标准 :-)【参考方案4】:这两个应该这样做:
'foo:bar'.match(/(.*):/)
'foo:bar'.match(/:(.*)/)
字符串中会有多个“:”吗?如果是这样,您可能更喜欢这个:
'foo:bar'.match(/(.*?):/)
【讨论】:
【参考方案5】:如果你想使用正则表达式而不是 str.split,你可以使用:
var str="foo:bar";
var pattern=/([^:]+):([^:]+)/gi;
var arr=pattern.exec(str);
arr.shift();
现在 arr 将是一个包含两个元素的数组:['foo', 'bar']。
【讨论】:
【参考方案6】:你想要向前看,向后看。哪些匹配内容后面是某个字符,或者前面是某个字符,但在匹配中不包括该字符。
对于前瞻,你会有类似 .*(?=:) 的东西,这意味着任何字符,0 次或更多次,后跟一个冒号,但不要在匹配中包含冒号,
对于后视,你有 .*(?
【讨论】:
以上是关于正则如何匹配某字符之后的内容的主要内容,如果未能解决你的问题,请参考以下文章