当前位置: 首页 > 面试题库 >

JavaScript正则表达式和子匹配项

贾俊艾
2023-03-14
问题内容

g设置修饰符后,为什么Java子匹配项停止工作?

var text = 'test test test test';

var result = text.match(/t(e)(s)t/);
// Result: ["test", "e", "s"]

上面的方法很好,result[1]is "e"result[2]is "s"

var result = text.match(/t(e)(s)t/g);
// Result: ["test", "test", "test", "test"]

上面的内容忽略了我的捕获组。以下是唯一有效的解决方案吗?

var result = text.match(/test/g);
for (var i in result) {
    console.log(result[i].match(/t(e)(s)t/));
}
/* Result:
["test", "e", "s"]
["test", "e", "s"]
["test", "e", "s"]
["test", "e", "s"]
*/

编辑:

我再次高兴地告诉您,十年后您现在可以执行此操作(.matchAll已添加到规范中)

let result = [...text.matchAll(/t(e)(s)t/g)];

问题答案:

我很惊讶地发现我是第一个回答我十年前一直在寻找答案的人(答案尚不存在)。我还希望实际的规范作者会在我之前回答它;)。

.matchAll 已被添加到一些浏览器中。

在现代javascript中,我们现在只需执行以下操作即可完成此操作。

let result = [...text.matchAll(/t(e)(s)t/g)];

一个例子是

saw(text).matchAll(/t(e)(s)t/g)

它将输出更加用户友好的匹配数组,如果您想花哨的话,可以将其放入命名的捕获组并获取对象数组。



 类似资料:
  • 给定下面的字符串 [NeMo(PROD)]10.10.100.100(EFA-B-3)[博科FC-Switch]传感器:电源#1(SNMP自定义表)关闭(无此名称(SNMP错误#2)) 我尝试获取多个匹配项以提取以下值: 因为我是正则表达式的初学者,所以我试图定义一些“规则”: 提取第一个圆括号内的第一个值,例如PROD 提取第一个闭合方括号和第二个开口圆括号之间的值,例如10.10.100.10

  • 我们得到了一些这样的内容:

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was

  • 问题内容: 如何匹配“ Hello world”或“ Hello World”形式的句子。该句子可能包含“-/数字0-9”。任何信息对我都会非常有帮助。谢谢。 问题答案: 这将做得很好。我对句子的定义:句子以非空格开头,以句点,感叹号或问号(或字符串结尾)结尾。标点符号后可能会有一个结束语。 这是输出: 正确地匹配所有这些(最后一个句子没有结尾标点符号),看起来似乎并不那么容易!

  • 问题内容: 当字符串以数字开头时,我需要匹配,然后是一个点,然后是一个空格和1个或多个大写字符。匹配必须发生在字符串的开头。我有以下字符串。 我尝试过的正则表达式是: 它不匹配。一个有效的正则表达式将对这个问题有什么作用? 问题答案: (对不起,我先前的错误。大脑现在坚定地投入了。嗯,也许。) 这有效: 分解: =字符串开头 =一个或多个数字 (之所以转义,是因为它在字符串中,因此) =文字(或者