正则表达式匹配文本内部: -

时间:2011-06-29 22:28:37

标签: javascript regex string pattern-matching

我正在构建一个需要匹配: text to match -内的文本的项目。例如,如果我有这个字符串:

  

nathanpc / ltweet:在#StackOverflow上提问:“正则表达式匹配内部文本: - ”--devs

我想匹配Asking a question at #StackOverflow: "Regular Expression To Match a Text Inside : -"。在第一个:和最后一个-之后的所有内容,但执行此操作的正确正则表达式是什么?

PS:我在jQuery中使用Javascript

4 个答案:

答案 0 :(得分:2)

如果你正在使用与Perl兼容的正则表达式,就像在大多数语言中找到的那样:

/:(.*)-/

根据语言的不同,您可能不需要斜杠。捕获组1将获得您想要的内容。

.*是一个贪婪的匹配器,所以它会尝试匹配尽可能多的字符,直到输入中的最后一个短划线。

答案 1 :(得分:1)

如果使用像.之类的贪婪运算符,它将尝试形成最大匹配(至少在Perl兼容的正则表达式引擎中)

所以要匹配像:(.*)-这样简单的东西。

在Perl中查看此示例脚本:

my $str = "Discard:Testing:- one two three -discard";
$str =~ m/:(.*)-/;
print $1;

$1 = "Testing:- one two three"

或在javascript中:http://www.regular-expressions.info/javascriptexample.html

答案 2 :(得分:1)

这适合我(红宝石):

[^:]+:\s+([^-]+.*?)\s-

测试:

 test = "nathanpc/ltweet: Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -' - @devs"

 m = test.match /[^:]+:\s+([^-]+.*?)\s-/

然后

 m[1].to_s

产生

Asking a question at #StackOverflow: 'Regular Expression To Match a Text Inside : -'

正如其他人已经注意到更简单:(.*)-的工作方式相同。也许没有空格:\s(.*)\s-

答案 3 :(得分:0)

“标准”正则表达式无法完全按照您的描述解析此文本。解析需要一些 context ,不能用正则表达式表示。例如,当收到第一个“ - ”时,表达式如何不结束?

在我的脑海中,我只能使用Perl扩展的正则表达式,允许子表达式解析,但这并不容易,因为你必须计算出“:”和“ - ”的匹配来匹配完全是最后一个。