首页 > 解决方案 > 为什么这个正则表达式返回字符而不是换行符

问题描述

我想在“test”之前插入一些东西,我使用这个正则表达式并期望它会返回换行符,但它会返回“h”,所以如果我用替换方法插入,我实际上不会像我想要的那样在“test”之前插入:在哪里错误?

https://jsfiddle.net/y4qh629a/

  const test = `
  blah blah
  test blah blah`;

  const regex = /[^"]\s*(?=test)/;
  const match = test.match(regex);
  alert(match)

标签: javascriptregex

解决方案


否定字符类 [^"] 使用除 char 之外的单个字符",在此示例中为hchar。

如果你想在匹配之前添加一些东西,你可以使用replace代替或者concat匹配返回的值(注意匹配返回一个数组,并且const test不能被覆盖)

在这种情况下,您可以使用捕获完整匹配。在替换中使用完全匹配使用$&.

请注意,除了存在之外,至少应该有一个字符",它也可以是一个空白字符。

const test = `
  blah blah
  test blah blah`;


console.log(test.replace(/[^"]\s*(?=test)/, "$&[replacement]"));

如果您还想test在字符串的开头进行匹配:

const test = `test here
  blah blah
  test blah blah`;

console.log(test.replace(/(?:^|[^"])\s*(?=test)/g, "$&[replacement]"));


推荐阅读