鱼C论坛

 找回密码
 立即注册
查看: 565|回复: 8

[已解决]这种方法创建的正则表达式怎么加上量词?

[复制链接]
发表于 2024-2-16 16:18:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这种方法创建的正则表达式怎么加上量词?我这样是错的        const rule = new RegExp(/[0-9]/,{minnumb,maxnumb})
/**
 * 为指定id添加change事件。检测其内容是否在存在一定位数的从0-9的数字。存在返回ture,不存在返回false。未找到指定id返回null并提示最近的两个id。
 * @param {any} idname - 指定的id名。默认为空
 * @param {any} minnumb - 最小位数,默认为0
 * @param {any} maxnumb - 最大位数,默认为6
 * @returns {boolean|null} 
 */
function numbcheck(idname = "",minnumb = 0,maxnumb = 6) {
    const idnames = document.querySelector(`#${idname}`)
    if (idnames) {
        const rule = new RegExp(/[0-9]/,{minnumb,maxnumb})
        idnames.addEventListener("change", function () {
            if (rule.text(idnames.value) || rule.text(idnames.innerHTML)) {
                return true
            } else {
                return false
            }
        })
    } else {
        checkid(idname)
        return null
    }
}
最佳答案
2024-2-22 21:53:18
在 JavaScript 中创建带有量词的正则表达式,可以在正则表达式中直接指定。

例如,如果想匹配至少 minnumb 位,至多 maxnumb 位的数字,可以使用 {minnumb,maxnumb} 来指定。

鱼油的正则表达式应该是这样创建的,直接在表达式里加上量词:
const rule = new RegExp( [0-9]{${minnumb},${maxnumb}} );
minnumb 是最小位数, maxnumb 是最大位数, [0-9] 表示匹配从0到9的任意数字。

量词 {minnumb,maxnumb} 会应用于之前的那个字符集合。

同时,鱼油在使用 RegExp 对象的时候,应该使用 test 方法来检测字符串是否符合规则,而不是 text 。

修改后的代码片段:
function numbcheck(idname = "", minnumb = 0, maxnumb = 6) {
    const idnames = document.querySelector( #${idname} );
    if (idnames) {
        const rule = new RegExp( [0-9]{${minnumb},${maxnumb}} );
        idnames.addEventListener("change", function () {
            if (rule.test(idnames.value) || rule.test(idnames.innerHTML)) {
                return true;
            } else {
                return false;
            }
        });
    } else {
        // 实现checkid函数以输出最近的两个id
        checkid(idname);
        return null;
    }
}
确保 checkid 函数已经在您的代码中定义,以便当找不到指定的 id 时能够正常运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-16 16:18:36 | 显示全部楼层
在正则表达式中添加量词可以使用以下符号:

- `*`:匹配前面的元素零次或多次。
- `+`:匹配前面的元素一次或多次。
- `?`:匹配前面的元素零次或一次。
- `{n}`:匹配前面的元素恰好 n 次。
- `{n,}`:匹配前面的元素至少 n 次。
- `{n,m}`:匹配前面的元素至少 n 次,但不超过 m 次。

你可以根据需要在你的代码中使用这些量词。下面是一个例子:
const rule = new RegExp(`\\d{${minnumb},${maxnumb}}`);

在这个例子中,使用了`{}`来指定要匹配的数字位数范围。其中`\\d`表示匹配任意数字字符。`{${minnumb},${maxnumb}}`表示匹配的数字位数范围为最小位数到最大位数。

注意,在字符串中使用`${}`可以插入变量值。

希望对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-16 16:20:35 | 显示全部楼层
FishC 发表于 2024-2-16 16:18
在正则表达式中添加量词可以使用以下符号:

- `*`:匹配前面的元素零次或多次。

不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-16 16:20:47 | 显示全部楼层


非常抱歉,我的回答有误。让我来完整地描述一下正确的做法。

要添加量词到你的正则表达式中,需要在待重复的元素后面添加相应的量词符号。以下是几个常用的量词符号:

- `*`:匹配前面的元素零次或多次。
- `+`:匹配前面的元素一次或多次。
- `?`:匹配前面的元素零次或一次。
- `{n}`:匹配前面的元素恰好 n 次。
- `{n,}`:匹配前面的元素至少 n 次。
- `{n,m}`:匹配前面的元素至少 n 次,但不超过 m 次。

在你的代码中,要为 `rule` 正则表达式添加量词,可以使用以下示例代码:
const rule = new RegExp(`\\d{${minnumb},${maxnumb}}`);

这个示例为匹配数字的正则表达式添加了量词。其中 `\\d` 表示匹配任意数字字符,`{${minnumb},${maxnumb}}` 表示匹配的数字位数范围为最小位数到最大位数。

非常抱歉给你带来困惑,希望这次的解释能对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-16 17:06:58 | 显示全部楼层
FishC 发表于 2024-2-16 16:20
非常抱歉,我的回答有误。让我来完整地描述一下正确的做法。

要添加量词到你的正则表达式中,需要在 ...

返回的是undefined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-16 17:07:13 | 显示全部楼层


非常抱歉,我在之前的回答中犯了一个错误。在你的代码中,无法直接在事件监听器内部返回结果。事件监听器只是一个回调函数,它不会影响外部函数的返回值。为了解决这个问题,你可以使用 Promise 来处理异步操作,并在异步操作完成后返回结果。以下是修改后的代码示例:
function numbcheck(idname = "", minnumb = 0, maxnumb = 6) {
  return new Promise((resolve, reject) => {
    const idnames = document.querySelector(`#${idname}`);
    if (idnames) {
      const rule = new RegExp(`\\d{${minnumb},${maxnumb}}`);
      idnames.addEventListener("change", function () {
        if (rule.test(idnames.value) || rule.test(idnames.innerHTML)) {
          resolve(true);
        } else {
          resolve(false);
        }
      });
    } else {
      checkid(idname);
      resolve(null);
    }
  });
}

// 使用示例
async function example() {
  const result = await numbcheck("myId", 3, 8);
  console.log(result);
}

example();

通过将 `numbcheck` 函数改为返回 Promise,你可以使用 `await` 关键字来等待异步操作的结果。然后,你就可以在外部函数中访问到正确的返回值了。希望这次的回答能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-17 12:44:18 | 显示全部楼层
在JavaScript中,规定正则表达式的重复次数或范围通常是在正则表达式本身中完成的,例如 `/a{3,5}/` 会匹配3到5个连续的字符 'a'。

对于你的需求,我们并不能把minnumb和maxnumb作为配置选项传给 `RegExp` ,因为 `RegExp` 的构造函数只接受两个参数,一个是模式字符串,一个是可选的标志字符串,不存在量词配置。 我们可以把minnumb和maxnumb直接拼接到正则表达式的字符串中,这样才可以规定匹配的数量。

此外,还需要注意的是js中正则表达式匹配字符串的方法是 `test` 而不是 `text`,你的代码中需要修正这一点。

根据你的需求,下面是一种可能的实现:
function numbcheck(idname = "", minnumb = 0, maxnumb = 6) {
    const idnames = document.querySelector(`#${idname}`)
    if (idnames) {
        const rule = new RegExp(`[0-9]{${minnumb},${maxnumb}}`);
        idnames.addEventListener("change", function () {
            if (rule.test(idnames.value) || rule.test(idnames.innerHTML)) {
                return true;
            } else {
                return false;
            }
        });
    } else {
        checkid(idname);
        return null;
    }
}
   

其中,${minnumb},${maxnumb} 是在正则表达式的字符串中直接拼接minnumb和maxnumb。 这样当minnumb和maxnumb变化时,正则表达式也会相应地变化。

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-21 16:08:39 | 显示全部楼层
试一下改正则,改成[0-9]{minnumb}{maxnumb}
对了,numble简写一般是num
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-22 21:53:18 | 显示全部楼层    本楼为最佳答案   
在 JavaScript 中创建带有量词的正则表达式,可以在正则表达式中直接指定。

例如,如果想匹配至少 minnumb 位,至多 maxnumb 位的数字,可以使用 {minnumb,maxnumb} 来指定。

鱼油的正则表达式应该是这样创建的,直接在表达式里加上量词:
const rule = new RegExp( [0-9]{${minnumb},${maxnumb}} );
minnumb 是最小位数, maxnumb 是最大位数, [0-9] 表示匹配从0到9的任意数字。

量词 {minnumb,maxnumb} 会应用于之前的那个字符集合。

同时,鱼油在使用 RegExp 对象的时候,应该使用 test 方法来检测字符串是否符合规则,而不是 text 。

修改后的代码片段:
function numbcheck(idname = "", minnumb = 0, maxnumb = 6) {
    const idnames = document.querySelector( #${idname} );
    if (idnames) {
        const rule = new RegExp( [0-9]{${minnumb},${maxnumb}} );
        idnames.addEventListener("change", function () {
            if (rule.test(idnames.value) || rule.test(idnames.innerHTML)) {
                return true;
            } else {
                return false;
            }
        });
    } else {
        // 实现checkid函数以输出最近的两个id
        checkid(idname);
        return null;
    }
}
确保 checkid 函数已经在您的代码中定义,以便当找不到指定的 id 时能够正常运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表