带有多个括号的javascript正则表达式

标签 javascript regex

我正在尝试编写一个 JavaScript 正则表达式,仅匹配 HTML 中的 NASM 风格注释。例如,将“;中断”匹配为“INT 21h ;中断”

您可能知道 /;.*/ 不能作为答案,因为注释之前可能有一个 HTML 实体;我认为 /(?:[^&]|&.+;)*(;.*)$/ 应该适用于它,但我发现它有两个问题:

  1. "      ; hello world".match(/(?:[^&]|&.+;)*(;.*)$/) 是一个数组["      ; Hello World ", "; Hello World "]。我不需要数组。
  2. "      ; Hello World ;一条消息".match(/(?:[^&]|&.+;)*(;.*)$/)["      ; Hello World ;一条消息", ";一条消息"];第二个元素更糟糕。

问题:

  1. 为什么返回 (?:) block ?
  2. 为什么是 "; 一条消息",而不是 "; hello world; 一条消息"
  3. 我可以使用什么正确的正则表达式?

最佳答案

1) (?:) 没有被返回。您所看到的是 .match() 方法总是返回一个数组:第一个元素是整个匹配项,后面的元素(如果有)是反向引用。在本例中,您有一个反向引用,因此该数组包含两项。

2)因为你的正则表达式的前半部分:

(?:[^&]|&.+;)*

这不是一个好主意!这将匹配任何内容,甚至包括新行!事实上,唯一它不匹配的是后面没有“;”的“&”。在同一条线上。因此,它匹配直到最后一个“;”的所有内容。在你的每一行中。

3) 我对 HTML 中的 MASM 风格的注释一点也不熟悉,所以我需要查看更广泛的列表,其中包含您想要匹配/不匹配的内容,以便在这里自信地给出一个好的答案。

但是我很快就整理出了一些东西,至少可以解决您上面给出的两个示例:

.*&.*?;\s(;.*)$

关于带有多个括号的javascript正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442468/

相关文章:

javascript - 正则表达式替换以空格分隔的整数

javascript - asp.net mvc 如何在服务器端生成HTML组件

javascript 表单验证空字段和错误输入

c# - 正则表达式 - 文件名中的版本

javascript从字符串创建不区分大小写的正则表达式

java - 正则表达式捕获重复内的组

javascript - 使用 on resize 设置 div 高度?

javascript - 在 if 语句中获取失败条件

javascript - .each(function() 中包含多个函数 - jQuery

Perl/TCL 中的正则表达式