“/([^.]*)\.(.*)/”是什么意思?

9
当我搜索某些内容时,我在这个网站上找到了一个已回答的问题。其中2个答案包含/([^.]*)\.(.*)/。该问题位于查找和替换jquery。我是javascript的新手,所以我想知道这是什么意思?谢谢。

5
我记得曾经在漫画中看到过这个脏话,或者说,如果你愿意,它也可以用于搜索和替换的常规表达式。 - xpda
1
@ xpda +1 让我在周五早上开心笑了 - MrFidge
12个回答

33
/([^.]*)\.(.*)/
让我们来解构一下。开头和结尾的斜杠是分隔符,标记正则表达式的开始和结束。
然后是一个括号分组:([^.]*)。括号只是将字符串分组在一起的。方括号表示"字符组",意味着该组中的任何字符都可以接受其位置。但是,第一个字符为^的组被否定,这将其意义倒转。由于否定之外的唯一字符是句点,因此匹配的是不是句点的单个字符。在方括号之后是*(星号),这意味着方括号可以匹配零次或多次。
然后我们来到\.。这是转义的句点。正则表达式中的句点具有特殊含义(除非在字符组中或已转义)。它匹配文本中的一个字面上的句点。 (.*)是一个新的括号子组。这次,句点匹配任何字符,星号表示它可以重复多次。
总之,该表达式找到任何一系列字符(不是句点),后跟单个句点,再跟任何字符。

3
这种做法虽然增加了可读性,但却违背了正则表达式的目的,而正则表达式通常被用来提取第一个句点之前和之后的字符串部分。 - Anon.
我知道这已经过时了,但应该提到组也可以匹配零个字符。即有效匹配为'a.b'、'a.'、'.b'和'.',其中组分别为'a'和'b'、'a'和''、''和'b'以及''和''。 - MattJenko

9

这是一个正则表达式(它匹配非句点的字符,后跟一个句点,然后是任何字符(比如“file.ext”))。你应该尽早学习它们。解释这个特定的正则表达式并不能帮助你,因为你需要从简单的开始。所以从正则表达式教程开始学习,并掌握精通正则表达式


1
-1 表示没有提到组,这个表达式的整个意义就失去了。 - user66363
@uncleo:好的,但那不是他问题的重点。他甚至没有意识到这是一个正则表达式,所以解释这个特定正则表达式的复杂性并不能帮助他太多。 - jason

7
原文为正则表达式,意思是:匹配所有除了句点(.)之外的字符,然后匹配一个句点,最后匹配任意字符。具体解释如下:
[1] ([^.]*) : 匹配所有除了句点(.)之外的字符。 [2] \. : 匹配一个句点。 [3] (.*) : 匹配任意字符。
因此,整个正则表达式的意思是:匹配所有除了句点(.)之外的字符,直到找到一个句点,然后匹配任意字符。

4

除了点号外,紧跟着一个点号,然后是任何内容。

您可以在regexpal上测试正则表达式。


3

这是一个正则表达式,大致搜索不包含句点的字符串,后跟一个句点,然后是包含任何字符的字符串。


1

这是一个带有一些高级用法的正则表达式。

考虑一个简化版本:/[^.]*\..*/,它与上面的表达式相同,但没有括号。这将匹配任何至少有一个点的字符串。当添加括号并进行匹配时,变量\1\2将包含来自括号的匹配部分。第一个变量将包含第一个点之前的任何内容。第二个变量将包含第一个点之后的所有内容。

示例:

input: foo...bar
\1: foo
\2: ..bar

input: .foobar
\1:
\2: foobar

1

这是一个正则表达式。如果正确使用,正则表达式是非常强大的工具。

这个特定的正则表达式从类似于“file.ext”的字符串中提取文件名和扩展名。


或者 .textfile(第一部分可选) - Amarghosh
1
最后一部分也是可选的。 . 也可以匹配。而 ........... 也会在第一个 . 上匹配。 - eyelidlessness
或者 Makefile(扩展名可选)(但是正则表达式不会匹配它)。 - Thanatos

1
这是一个正则表达式,它将字符串分成两部分:第一个句点之前的所有内容和剩余的部分。大多数正则表达式引擎(包括Javascript)允许您单独访问字符串的这些部分(使用$1引用第一部分,$2引用第二部分)。

1

这个正则表达式生成两个匹配的表达式,可以被检索。

这两部分是第一个点之前的字符串(可能为空),和第一个点之后的字符串(可能包含其他点)。

输入的唯一限制是它至少包含一个点。与其他答案相反,它将匹配“。”,但检索到的组将为空。


0

在我看来,/.*\..*/g 会做同样的事情。

const senExample = 'I am test. Food is good.';
const result1 = senExample.match(/([^.]*)\.(.*)/g);
console.log(result1); // ["I am test. Food is good."]
const result2 = senExample.match(/^.*\..*/g);
console.log(result2); // ["I am test. Food is good."]

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