选择所有不是俄语短语的文本

时间:2017-08-19 19:44:29

标签: regex

我有一个JSON文件,其中包含如下所示的数据:

  

{ “ID”: “599874c2cc6ffaf42d4c3751”, “idMemberCreator”: “5966727c2d9c33e207a0f5b2”, “数据”:{ “listAfter”:{ “shortLink”: “LubhJK4r”, “idShort”:71, “名称”:“Что   забред*!“,   “ID”: “59972f276d4e2ed2ad13eab6”, “IDLIST”: “59957b7d842a7cc1c3dfa039”} ...

这包含一定数量的西里尔字母短语,用引号括起来,例如"Что за бред*!"。这些短语还可能包含数字,空格和标点符号,例如*,.!?

我想创建一个正则表达式来选择除这些短语之外的所有,这样我就可以删除所有元数据并保留俄语短语。短语将以引号开头,后跟数字(例如2017)或大写西里尔字符,并将持续到下一个引号。

我知道如何自己选择短语:

[А-Я0-9][а-яА-Я0-9 *,.!?]+

但是,除了这些短语之外,选择其他所有内容都很复杂,因为文件的其余部分包含数字和逗号。

你能帮我创建我需要的正则表达式吗?

1 个答案:

答案 0 :(得分:1)

如果这是一个JSON,你可以遍历它并过滤掉你的正则表达式。



var json = {
  "id": "599874c2cc6ffaf42d4c3751",
  "idMemberCreator": "5966727c2d9c33e207a0f5b2",
  "data": {
    "listAfter": {
      "shortLink": "LubhJK4r",
      "idShort": 71,
      "name": "Что на бред*!",
      "id": "59972f276d4e2ed2ad13eab6",
      "idList": "59957b7d842a7cc1c3dfa039"
    }
  }
};

function deepJsonFilter(json, pattern) {
  return Object.keys(json).reduce((acc, key) => {
    if (typeof json[key] === 'object') {
      acc[key] = deepJsonFilter(json[key], pattern);
    } else if (!pattern.test(json[key])) {
      acc[key] = json[key];
    }
    return acc;
  }, {})
}

console.log(deepJsonFilter(json, /[А-Яа-яёЁ]+/));