Sorawithcat 发表于 2024-2-16 16:18:20

这种方法创建的正则表达式怎么加上量词?

这种方法创建的正则表达式怎么加上量词?我这样是错的      const rule = new RegExp(//,{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(//,{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
    }
}

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

Sorawithcat 发表于 2024-2-16 16:20:35

FishC 发表于 2024-2-16 16:18
在正则表达式中添加量词可以使用以下符号:

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


不对

FishC 发表于 2024-2-16 16:20:47

Sorawithcat 发表于 2024-02-16 16:20
不对

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

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

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

在你的代码中,要为 `rule` 正则表达式添加量词,可以使用以下示例代码:

const rule = new RegExp(`\\d{${minnumb},${maxnumb}}`);

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

Sorawithcat 发表于 2024-2-16 17:06:58

FishC 发表于 2024-2-16 16:20
非常抱歉,我的回答有误。让我来完整地描述一下正确的做法。

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

返回的是undefined

FishC 发表于 2024-2-16 17:07:13

Sorawithcat 发表于 2024-02-16 17:06
返回的是undefined

非常抱歉,我在之前的回答中犯了一个错误。在你的代码中,无法直接在事件监听器内部返回结果。事件监听器只是一个回调函数,它不会影响外部函数的返回值。为了解决这个问题,你可以使用 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 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 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(`{${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变化时,正则表达式也会相应地变化。

求最佳答案{:10_254:}

zhangchenyvn 发表于 2024-2-21 16:08:39

试一下改正则,改成{minnumb}{maxnumb}
对了,numble简写一般是num

不二如是 发表于 2024-2-22 21:53:18

在 JavaScript 中创建带有量词的正则表达式,可以在正则表达式中直接指定。

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

鱼油的正则表达式应该是这样创建的,直接在表达式里加上量词:

const rule = new RegExp( {${minnumb},${maxnumb}} );
minnumb 是最小位数, maxnumb 是最大位数, 表示匹配从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( {${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 时能够正常运行
页: [1]
查看完整版本: 这种方法创建的正则表达式怎么加上量词?