gpt4 book ai didi

括号后的javascript正则表达式问号

转载 作者:行者123 更新时间:2023-11-29 19:15:57 24 4
gpt4 key购买 nike

我只想捕获一些出现的字符串,所以我在捕获 () 之后使用 ? 意味着我想捕获该字符串的那部分但它没有显示(零或一个)但是当我在 () 之后添加 ? 它会删除该匹配项:

var str = 'blablablacaptureblablabla';

如果我使用 () 进行定期捕获,我会得到想要的捕获:

console.log(str.match(/.*(capture).*/i)); // array[1] = capture

如果我添加 ? 来指示捕获可能是或根本不是我得到未定义:

console.log(str.match(/.*(capture)?.*/i)); // array[1] = undefined

这是为什么呢?我想要的只是捕获单词 capture 无论它是否存在于字符串中所以这不会返回 null:

var str = 'blablablalablabla'; //string without word 'capture'
console.log(str.match(/.*(capture)?.*/i)); // this will work but if i use it with string with the word 'capture' it won't capture the 'capture'

编辑:

明确一点 - 我希望这个字符串 blablacaptureblabla 捕获单词 capture 并且这个字符串 blablablabla 不返回 null 因为我使用 ? 表示零或一

最佳答案

如果您希望始终初始化捕获值(以避免捕获组 #1 的 undefined 值),您需要使用具有空交替的强制性组< em>和使用tempered greedy token (?:(?!capture).)*:

/^(?:(?!capture).)*(capture|).*/i

参见 regex demo

A tempered greedy token是由(非)捕获组((?:...)(...))匹配未开始的单个字符的特殊构造一个特定的序列(用负前瞻指定,(?!...)),量词被应用。

下面是一个 JS 演示:

var str = 'blablablalablabla'; //string without word 'capture'
document.body.innerHTML = '"' + str.match(/^(?:(?!capture).)*(capture)?.*/i)[1] + '"<br/>'; // undefined, as the group is optional
document.body.innerHTML += '"' + str.match(/^(?:(?!capture).)*(capture|).*/i)[1] + '"<br/>'; // empty string, the group is obligatory
var str1 = 'blablabcapturelalablabla';
document.body.innerHTML += '"' + str1.match(/^(?:(?!capture).)*(capture|).*/i)[1] + '"';

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com