如何使用正则表达式获取特定字符后面的所有字符,例如逗号(",")之后的所有字符?

66
需要一个正则表达式来获取变量中,后面的所有字符(不包括它)。这个变量可以包含例如


'SELECT___100E___7',24
'SELECT___100E___7',1
'SELECT___100E___7',286
'SELECT___100E___7',5147

注意:在这个变量中,,后面的字符可以是任意长度。

对于新手来说,解释正则表达式将是一个额外的帮助 :)

编辑:一个JavaScript答案也同样好。


1
你使用哪种编程语言?如果你想要一个Java的例子,Perl的答案会让你感到困惑。 - justintime
JavaScript/jQuery,抱歉我忘了提到。所以类似这样的代码:var result_val = $(this).attr('href').match(RegEX); - user357034
1
你为什么 绝对 需要正则表达式呢?这个问题可以很容易地通过基本字符串处理实现。 - HoLyVieR
6
元评论:如果您通过谷歌搜索来到这里,那么您是在寻找正则表达式帮助,而大量回答声称“您不需要正则表达式”会有点令人恼火。 - Andrew Jon Dodds
+根据安德鲁所说的。 - Coder
10个回答

119

你不需要正则表达式来完成这个任务。这是一个例子:

var str = "'SELECT___100E___7',24";
var afterComma = str.substr(str.indexOf(",") + 1); // Contains 24 //

1
实际上,我并不完全需要一个正则表达式的答案。我已经修改了我的问题,以更清楚地反映这一点,而且你的回答非常清晰有效。 - user357034
1
这将获取任意长度单词后面的文本:https://dev59.com/N2855IYBdhLWcg3w-JQr#44617843 - Patricio Córdova

62

简短回答

两种方法:

  • ,[\s\S]*$,.*$ 可以匹配第一个逗号之后的所有内容(具体取决于使用哪个,详见下面解释);或者

  • [^,]*$ 匹配最后一个逗号之后的所有内容(这可能是你想要的)。

例如在 JavaScript 中可以使用 /[^,]*/.exec(s)[0],其中 s 是原始字符串。如果你想使用多行模式并以此查找所有匹配项,则可以使用 s.match(/[^,]*/mg) 来获取一个数组(如果你在变量中有多个类似于示例行的文本,且它们分别位于不同的行上)。

解释

  • [\s\S] 是一个字符类,可以匹配空格和非空格字符(即所有字符)。它与 . 不同之处在于它还匹配换行符。
  • [^,] 是一个否定字符类,可以匹配除逗号外的任何字符。
  • * 表示前一个项目可以重复 0 次或更多次。
  • $ 是锚点,要求匹配的结尾必须是字符串的末尾(如果使用了 /m 多行标记,则为行的末尾)。

对于第一个匹配项,第一个正则表达式找到第一个逗号 ,,然后匹配直到行末的所有字符 [\s\S]*$,包括逗号在内。

第二个正则表达式会尽可能匹配最后一个逗号之前的非逗号字符。因此,整个匹配结果将位于最后一个逗号之后。


你的第二个答案可行,但我决定选择非正则表达式的解决方案。感谢你的努力!!! - user357034
我使用了这个正则表达式:[^/?]*$。起初我忘记用/转义?,结果它没有起作用。 - user1136251

19
[^,]*$

可能会做到。(匹配最后一个逗号后的所有内容)。

解释:[^,] 匹配除了 , 以外的任何字符。* 表示正则表达式匹配零个或多个 [^,]$ 符号匹配行尾。


2
这不匹配逗号后面的所有内容,但可以匹配除逗号以外的任何内容。如果没有逗号怎么办? - Gumbo
原帖中的示例表明有逗号存在。而没有逗号的行为未定义,因此这应该是可以的。 - Sven Marnach

7
.+,(.+)

解释:

.+,

将搜索逗号之前的所有内容,包括逗号。

(.+) 

将会搜索逗号后面的所有内容,根据您的正则表达式环境而定。

\1

这里的$1是指第一个被捕获的括号组,例如在这个例子中,指逗号后面的所有内容。


5

这将匹配任意长度的单词:

var phrase = "an important number comes after this: 123456";
var word = "this: ";
var number = phrase.substr(phrase.indexOf(word) + word.length);
// number = 123456

这个东西确实有帮助。谢谢 :) - Amresh Giri

3

另一个想法是执行myVar.split(',')[1];

对于简单情况,不使用正则表达式是个好主意...


2
也许你可以尝试这个。
var str = "'SELECT___100E___7',24";
    var res = str.split(',').pop();

2
您可以尝试以下方法:
new_string = your_string.split(',').pop().trim();

这是它的工作原理:
  • split(',')创建由your_string不同部分组成的数组。

(例如,如果字符串是"'SELECT___100E___7',24",则数组将是["'SELECT___100E___7'","24"])。

  • pop()获取数组的最后一个元素。

(在此示例中,它将是"24")。

这已经足够了,但是以防万一可能会有一些空格(不是针对OP的情况,而是更普遍的情况),我们可以有:

  • trim(),它将删除字符串周围的空格(如果它是" 24 ",它将变为简单的"24"

这是一个简单的解决方案,肯定比正则表达式容易。


1
可能需要一点解释。与正则表达式解决方案相比,有什么优缺点? - Ingo Karkat
1
我没有发现任何缺点... 我觉得它很容易,因为正则表达式通常是难以理解的。 - Bakhtawar GIll

0

抱歉,我没有说明我需要翻译成哪种语言,这是我的错误。 - user357034
你仍然可以使用相同的正则表达式。 - Alex Rashkov

0

(?<=,).+

, 上进行正向回顾。

该组后面跟着任意字符 .,具有一个或多个它们的量词 +


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接