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

Regex /([^.]*)\.(.*)/是什么意思?,regex,Regex,当我搜索一些东西时,我在这个网站上找到了一个答案。其中2个答案包含 /([^.]*)\(.*)/ 在他们的回答上。 问题位于。我是javascript的新手,所以我想知道,这是什么意思?谢谢。这是一个正则表达式,它大致搜索不包含句点的字符串,后跟句点,然后是包含任何字符的字符串。它是一个(它匹配非句点,后跟句点,后跟任何字符(想想“file.ext”))。你应该跑,而不是走,去了解他们。解释这个特定的正则表达式是如何工作的对您没有帮助,因为您需要从更简单的开始。所以从a开始,然后选择。除了点之外

当我搜索一些东西时,我在这个网站上找到了一个答案。其中2个答案包含

/([^.]*)\(.*)/

在他们的回答上。
问题位于。我是javascript的新手,所以我想知道,这是什么意思?谢谢。

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

它是一个(它匹配非句点,后跟句点,后跟任何字符(想想“file.ext”))。你应该跑,而不是走,去了解他们。解释这个特定的正则表达式是如何工作的对您没有帮助,因为您需要从更简单的开始。所以从a开始,然后选择。

除了点之外的任何东西,后面跟着点,后面跟着任何东西


您可以在正则表达式上测试正则表达式。如果使用得当,正则表达式是强大的工具


这个特殊的正则表达式从一个看起来像“file.ext”的字符串中提取文件名和扩展名。它是一个正则表达式,将字符串分成两部分:第一个句点之前的所有内容,然后是剩余部分。大多数正则表达式引擎(包括Javascript引擎)允许您分别访问字符串的这些部分(第一部分使用$1,第二部分使用$2)

让我们来解构它。开始斜杠和结尾斜杠是分隔符,用于标记正则表达式的开始和结束

然后是一个带括号的组:
([^.]*)
括号只是用来将字符串组合在一起的。方括号表示“字符组”,这意味着该组中的任何字符都可以替换。但是,第一个字符是
^
,它的意思与此相反,从而否定了此组。由于否定旁边的唯一字符是句点,因此它与不是句点的单个字符匹配。方括号后面是一个
*
(星号),这意味着方括号可以匹配零次或多次

然后我们进入
\。
。这是一个逃过的时期。正则表达式中的句点具有特殊含义(转义或在字符组中除外)。这与文本中的文字句点匹配

(.*)
是一个新的paranthesized子组。这一次,句号匹配任何字符,星号表示可以根据需要重复多次

总之,表达式查找任何字符序列(不是句点),后跟单个句点,再后跟任何字符


编辑:删除了关于缩短的部分,因为它破坏了正则表达式的假定用途。

。字符匹配除换行符以外的任何字符\r或\n

^否定它后面的内容(在本例中为点)

*表示“零次或多次”

括号组和捕获

\允许您匹配特殊字符(如点或星)

所以这个
([^.]*)
意味着任何换行符重复了零次或更多次(它只会吃掉回车符)

(.*)
部分表示零次或多次的任何字符串(换行除外)

\.
表示一个真正的点

因此,整个过程将匹配零个或多个换行符,后跟一个点,后跟任意数量的字符


有关正则表达式的更多信息和非常好的参考资料,请查看:

这是一个具有高级用途的正则表达式

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

示例:

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

input: .foobar
\1:
\2: foobar

此正则表达式生成两个可检索的匹配表达式

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


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

这是一个正则表达式,基本上是一种字符模式,用于描述另一种字符模式。我曾经使用regexp在文本文件中查找电子邮件地址,如果您正确编写regexp,它们可以在更大的文本体中查找几乎任何形式的文本。

Original:
/([^.]*)\。(.*)/

将此拆分为:
[1]
([^.]*)
:表示匹配除
以外的所有字符。[期间]

[2]
\。
:匹配句点
[3]
(.*)
:匹配任何字符

所以它变成了
[1] 匹配所有不是
的字符。[period]
[2]直到找到一个
[period]
为止,然后[3]匹配所有字符。

IMO
/.*.*.*/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."]

除了增加可读性之外,这种方法还违背了正则表达式的目的。这可能会在第一个句点之前和之后提取字符串的部分。我意识到这很旧,但应该提到的是,组也可以匹配零个字符。有效的匹配词是“a.b”,“a.”,“.b”和“.”,组分别是“a”和“b”,“a”和“,”和“b”,以及“和”。我想我曾经在连环画上看到过这种亵渎。或者,如果您愿意,可以使用一个正则表达式来搜索和替换。@xpda+1用于在星期五早上逗我发笑[^.]匹配除文字点字符“.”以外的任何字符。这是特定于JavaScript的语法吗?有什么区别吗。和\@乔·巴斯里科:
\。
匹配
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."]