Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegExp在JSFiddle中工作,但不在nodejs中工作_Javascript_Node.js_Regex_Babeljs - Fatal编程技术网

Javascript RegExp在JSFiddle中工作,但不在nodejs中工作

Javascript RegExp在JSFiddle中工作,但不在nodejs中工作,javascript,node.js,regex,babeljs,Javascript,Node.js,Regex,Babeljs,我有正则表达式: /(?:!!)(.+)(?:!!)(?:\(zoomOn )([\S,]+)(?:\))/g 它匹配类似于!!一些文字!!(zoomOn 1,2,3) 这在浏览器()中可以正常工作,但在节点中不行。我在ES2015中写作,使用巴别塔和 对于额外的洞察力,这是一个决战扩展。我注意到在regexp中添加了一些额外的\。这是我不知道的Node/ES5的一个怪癖吗 更新 我希望我不需要发布节点的代码,因为我认为这只是一个节点怪癖 无论如何,代码是用于决战的扩展: # extensio

我有正则表达式:

/(?:!!)(.+)(?:!!)(?:\(zoomOn )([\S,]+)(?:\))/g
它匹配类似于
!!一些文字!!(zoomOn 1,2,3)

这在浏览器()中可以正常工作,但在节点中不行。我在ES2015中写作,使用巴别塔和

对于额外的洞察力,这是一个决战扩展。我注意到在regexp中添加了一些额外的
\
。这是我不知道的Node/ES5的一个怪癖吗

更新 我希望我不需要发布节点的代码,因为我认为这只是一个节点怪癖

无论如何,代码是用于决战的扩展:

# extensions.js
export const manipulationAPIExtensions = () => [
  {
    // [zoomOn node1,node2,node3,...](some text)
    type: 'lang',
    filter: (text, converter, options) => {
      const toReturn = text.replace(/(?:!!)(.+)(?:!!)(?:\(zoomOn )([\S,]+)(?:\))/g, (match, innerText, nodeString) => {
        const nodes = nodeString.split(/\s*,\s*/);
        let nodeArrayAsString = '[';
        nodes.forEach(node => {
          nodeArrayAsString += `'${node}',`;
        });
        nodeArrayAsString += ']';
        return `<a onclick="pathwayInstance.manipulator.zoomOn(${nodeArrayAsString})">${text}</a>`;
      });
      return toReturn;
    },
  },
];
然后在我的单元测试中:

describe('CustomMarkdown', () => {
  // Don't really need Kaavio since we are only checking the output HTML
  const mockKaavioInstance = {};
  const converter = getShowdown(mockKaavioInstance);
  console.log(converter.getAllExtensions())

  describe('Kaavio', () => {
    it('should return the correct HTML from the markdown', () => {
      const markdown = normalize(fs.readFileSync(`${__dirname}/extensions/Kaavio.md`, 'utf8'));
      const HTML = normalize(fs.readFileSync(`${__dirname}/extensions/Kaavio.html`, 'utf8'));

      const output = converter.makeHtml(markdown);

      assert.equal(output, HTML);
    });
  });
});
由于未找到匹配项,单元测试失败

如果我做一些像下面这样简单的事情,它就会起作用。当然,单元测试不起作用,但是如果我将其console.log注销,那么我将得到
匹配的预期结果

# extensions.js
export const manipulationAPIExtensions = () => [
  {
    // [zoomOn node1,node2,node3,...](some text)
    type: 'lang',
    filter: (text, converter, options) => {
      const toReturn = text.replace(/./g, (match) => {
        return 'matched';
      });
      return toReturn;
    },
  },
];

这在Node中对我有效,只是尝试了一下,但该fiddle使用了alert()。您需要使用节点能够理解的类似console.log()的东西

var text = '!!some text!!(zoomOn node1)';
text.replace(/(?:!!)(.+)(?:!!)(?:\(zoomOn )([\S,]+)(?:\))/g, function (match, innerText, nodeString) {
    console.log("matched!");
})

也许您有一些其他代码没有发布,这会造成干扰?

这很尴尬,但这是检查所有调用函数的一个教训。在以下行中调用的
normalize()
函数:

const markdown = normalize(fs.readFileSync(`${__dirname}/extensions/Kaavio.md`, 'utf8'));

const HTML = normalize(fs.readFileSync(`${__dirname}/extensions/Kaavio.html`, 'utf8'));

正在用项目符号字符替换空格。。。不管怎样,谢谢你的帮助

您是说,如果您在节点中执行完全相同的代码,它就不匹配了吗?“这似乎不太可能。”费利克斯克林说。这似乎不太可能,但似乎确实如此。非常困惑您在node中使用的代码是什么?询问,因为那里不存在警报,这是你在小提琴中使用的。可能问题是巴贝尔。。。我在节点中执行了以下代码,结果为:console.log(/(?:!!)(.+)(?:!!)(?:(?:)([\S,]+)(?:)/g)@这应该会导致真的。这意味着正则表达式正在工作。感谢您的测试!我已经在问题的更新中转储了Node中的所有代码。请提供您的package.json、grunt和.babelrc文件。此代码不会基于showdownjs基本npm测试运行。它穿不过去。
const markdown = normalize(fs.readFileSync(`${__dirname}/extensions/Kaavio.md`, 'utf8'));

const HTML = normalize(fs.readFileSync(`${__dirname}/extensions/Kaavio.html`, 'utf8'));