用于 Javascript 正则表达式和数字的 Javascript 正则表达式

Posted

技术标签:

【中文标题】用于 Javascript 正则表达式和数字的 Javascript 正则表达式【英文标题】:Javascript Regex for Javascript Regex and Digits 【发布时间】:2012-11-23 09:48:16 【问题描述】:

标题似乎有点递归,确实如此。

我正在开发一种 javascript,它可以突出显示/着色 html 中显示的 Javascript 代码。因此,在 Internet 浏览器中,cmets 将变为绿色,定义(for、if、while 等)将变为深蓝色和斜体,数字将变为红色,等等其他元素。但是,颜色并不是那么重要。

我正在尝试找出两个不同的正则表达式,它们已经开始引起轻微的头痛。

1。使用正则表达式查找正则表达式

我想使用 Javascript 在 HTML 的 script-tags 中查找正则表达式,例如:

    match(/findthis/i);

,其中正则表达式部分当然是“/findthis/i”。

规则如下:

    查找多次出现 (/g) 并不重要。 它必须在同一行(不是 /m)。 不区分大小写 (/i)。 如果反斜杠(忽略字符)后面紧跟正斜杠“​​/”,则正斜杠是表达式的一部分,而不是转义字符。例如:/itdoesntstop\/untilnow:/ 相邻的两个正斜杠 (//) 是: (A) 开头:不是正则表达式;这是一条评论。 (B) 稍后:第一个斜线是正则表达式的结尾,第二个斜线只是一个字符。 正则表达式一直持续到换行符或输入结束 (\n|$),或遇到转义字符(符合规则 4 的第二个正斜杠)。但是,只要在第二个正斜杠之后仅遇到字母字符,它们就被视为正则表达式的一部分。例如:/aregex/allthisispartoftheregex

到目前为止,我得到的是这样的:

    '\\/(?:[^\\/\\\\]|\\/\\*)*\\/([a-zA-Z]*)?'

但是,它并不一致。有什么建议吗?

2。使用正则表达式查找数字(字母数字,浮点数)

自行查找数字很简单。但是,查找浮动数字(带有多个句点)和包含下划线的字母则更具挑战性。

以下所有内容都被视为数字(每个空格后开始一个新数字):

3 3.1 3.1.4 3a 3.A 3.a1 3_.1

规则:

    查找多次出现 (/g) 并不重要。 它必须在同一行(不是 /m)。 不区分大小写 (/i)。 数字必须以数字开头。但是,数字前面或后面可以跟非单词 (\W) 字符。例如:“=9.9;”其中“9.9”是实际数字。 “a9不是数字。数字前的句点“.9”不被视为数字的一部分,因此实际数字是“9”。 允许的字符:[a-zA-Z0-9_.]

我有什么:

'(^|\\W)\\d([a-zA-Z0-9_.]*?)(?=([^a-zA-Z0-9_.]|$))'

它并没有按照我想要的方式工作。

【问题讨论】:

【参考方案1】:

对于第一部分,我认为您非常接近。这是我将使用的(作为正则表达式文字,以避免所有双重转义):

/\/(?:[^\/\\\n\r]|\\.)+\/([a-z]*)/i

我不知道你在角色类之后的第二个选择是什么意思。但在这里,第二种选择用于消耗反斜杠以及它们后面的任何内容。最后一部分很重要,因此您可以识别以这样的形式结尾的正则表达式:/backslash\\/。正则表达式末尾的 ? 是多余的。否则应该没问题。

Test it here.

您的第二个正则表达式非常适合您的规范。虽然有一些多余的元素。您可能想要做的主要事情是捕获除可能的第一个字符之外的所有内容:

/(?:^|\W)(\d[\w.]*)/i

现在实际数字(没有第一个字符)将在捕获组1 中。请注意,我删除了不贪婪和前瞻,因为贪婪本身就完全一样。

Test it here.

【讨论】:

你好 m.buettner。感谢您的回答!正则表达式:正如您在this example 中看到的,正则表达式神奇地认为可以突然搜索新行(在“match(/r/r/r);”处)。我一直遇到的问题。 数字:效果很好。确实,您的简化版本更好。谢谢。 @Kafoso 啊对,换行。请参阅我的编辑。只需在否定字符类中包含换行符即可。 它有效。谢谢! :) - 虽然,我仍然有点被它搜索多行而不使用 /m 的事实所抛弃。 @Kafoso m 与是否匹配换行符无关。所有m 所做的只是使^$ 分别匹配行的开头和结尾。不多不少。 . 永远不会匹配换行符(在 JavaScript 中),无论您是否使用 m。但是否定字符类表示“除...之外的任何字符”,其中包括换行符。

以上是关于用于 Javascript 正则表达式和数字的 Javascript 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

用于密码的javascript正则表达式,包含至少8个字符、1个数字、1个大写和1个小写[重复]

用于在JavaScript中格式化数字的正则表达式

7.4 Javascript:表单验证-揭开正则表达式的面纱

7.4 Javascript:表单验证-揭开正则表达式的面纱

正则表达式匹配具有不同数字和最小长度的数字

用于验证邮政编码或城市的 JavaScript 正则表达式