正则如何匹配某字符之后的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则如何匹配某字符之后的内容相关的知识,希望对你有一定的参考价值。

有多行文字,想匹配第一个 # 号和后面的所有内容,之后可能还会出现 # 号,可以忽略:
第一行
第二行
#从这里开始匹配
第N行
第N行
#还会出现#号

参考技术A var reg = /\#.0,/;
\ :转义字符
. :位匹配符,一个代表一位
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 次或更多次,后跟一个冒号,但不要在匹配中包含冒号,

对于后视,你有 .*(?

【讨论】:

以上是关于正则如何匹配某字符之后的内容的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配不是特定子字符串的内容

正则表达式

C# 如何高效替换一个字符串中的全部某字符?

java正则表达式如何获取字符串中所有匹配内容

js 正则表达式,字符串中如何匹配id的内容?

Js正则表达式的如何写这样一个匹配规则!1) 取指定范围的内容 2)过滤指定范围的内容