仅删除特定值的引号

时间:2019-02-22 08:01:37

标签: javascript regex

我正在为webpack编写一个简单的加载器,最后一步,我需要删除该函数的双引号。请参见下面的示例:

我得到的字符串如下:

`export default {
  mykey:
  [
    {
      valueString: "string",
      removeQuotesForValue: "() => import(/* webpackChunkName: 'a' */ 'pathToA')"
    },
    {
      valueString: "someOtherString",
      removeQuotesForValue: "() => import(/* webpackChunkName: 'b' */ 'pathToB')"
    }
  ]
}`

我需要删除导入功能的双引号以获取:

`export default {
  mykey:
  [
    {
      valueString: "string",
      removeQuotesForValue: () => import(/* webpackChunkName: 'a' */ 'pathToA')
    },
    {
      valueString: "someOtherString",
      removeQuotesForValue: () => import(/* webpackChunkName: 'b' */ 'pathToB')
    }
  ]
}`

如果我知道密钥removeQuotesForValue永远不会改变,是否可以使用JavaScript正则表达式来实现?

2 个答案:

答案 0 :(得分:1)

通常,强烈建议不要使用正则表达式来处理源代码。但是,如果您可以依靠单词removeQuotesForValue,则可以选择:

(removeQuotesForValue[^\n"]+)"([^\n"]+)"

JavaScript中:

let source = `export default {
  mykey:
  [
    {
      valueString: "string",
      removeQuotesForValue: "() => import(/* webpackChunkName: 'a' */ 'pathToA')"
    },
    {
      valueString: "someOtherString",
      removeQuotesForValue: "() => import(/* webpackChunkName: 'b' */ 'pathToB')"
    }
  ]
}`;

let regex = /(removeQuotesForValue[^\n"]+)"([^\n"]+)"/g;

source = source.replace(regex, "$1$2");
console.log(source);

请参见a demo on regex101.com

答案 1 :(得分:0)

尝试此操作,可防止意外删除任何功能“ 报价

let removeQuotesForValue = "() => import(/* webpackChunkName: 'b' */ 'pathToB')",
exportedValue;

exportedValue = removeQuotesForValue.slice(0, removeQuotesForValue.length-1);
console.log(exportedValue)