Node.js中的RegEx不匹配

时间:2019-05-12 20:30:05

标签: javascript node.js regex regex-lookarounds regex-group

考虑以下正则表达式:

^[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}$

我确实在https://regexr.com/上使用测试Collection '98和匹配项进行了尝试。

然后我确实在Node.js中实现了它:

const myRegex = '^[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}$';

const name = 'Collection \'98';

if (!name.match(myRegex))
  console.log('NOK');
else
  console.log('OK');

但是,它始终会打印NOK

为什么验证无法通过应用程序进行?

2 个答案:

答案 0 :(得分:1)

将正则表达式放在斜杠(/)之间,而不要用引号"括起来:

const myRegex = /^[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}$/;

const name = 'Collection \'98';

if (!name.match(myRegex))
  console.log('NOK');
else
  console.log('OK');

答案 1 :(得分:1)

我不确定您的代码,但是在我看来您的表达是正确的并且可以正常工作。

此代码段表明它将返回一个匹配项。

const regex = /[^-\s][a-zA-Z\sàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ\d!@#$\+%&\'*]{1,20}/gm;
const str = `Collection '98`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

您可以在this link中测试/修改您的表达式。

enter image description here


似乎您可能已经忘记在两个正斜杠之间添加表达式了,您可以使用/expression/对其进行简单修复。