Я хочу написать функцию, которая принимает строку и возвращает логическое значение в зависимости от того, содержит ли эта строка массив (синтаксис).

И мне нужна помощь с шаблоном регулярного выражения.

Вот пример строки, которая вернет true:

'["Visual Thinking", "GitHub", "Any"]'

Вот пример строки, которая вернет false:

"This string does not contain array syntax"

До сих пор вы разрабатывали следующий шаблон

/\[((\"\w*\")(,)?)*\]/g
-1
frfernandezdev 16 Сен 2021 в 16:58

3 ответа

Лучший ответ

Вы можете определить, является ли строка массивом или нет, используя JSON.parse

const str = '["Visual Thinking", "GitHub", "Any"]';
let isArr;

try {
  const arr = JSON.parse(str);
  if (Array.isArray(arr)) isArr = true;
} catch (error) {
  isArr = false;
}

console.log(isArr);
2
HR01M8055 16 Сен 2021 в 14:13

Это мой подход к решению этой проблемы.

Если вы хотите захватить массив или массивы, вы можете на это потратить.

let string = 'pape saliou is a good ["Visual Thinking", "GitHub", "Any"]';


function checkArrayInString(){
  let strArr = string.split('');

  let brackets = {
   '[':'left',
   ']':'right'
  };

  let leftBrackets=[];
  let rightBrackets=[];
  for(let i=0; i<strArr.length; i++){
    if(brackets[strArr[i]] ==='left'){
      leftBrackets.push(i);
    }
    if(brackets[strArr[i]]==='right'){
      rightBrackets.push(i);
    }
  }
  
return leftBrackets[0]<rightBrackets[0]
}

checkArrayInString(string);

Это проверит, есть ли в строке хотя бы один массив;

-1
pape saliou ka 16 Сен 2021 в 14:55

Другое решение - просто использовать eval. функция, и после этой проверки, является ли массив или нет, без преобразования его в массив. Нравится:

const checkArray = (text) => {
  try {
    let res = eval(text);
    return Array.isArray(res);
  } catch (err) {
    return false;
  }
}

let wrongText = '[AAAAA"Visual Thinking", "GitHub", "Any"]';
console.log(checkArray(wrongText)); // false
let rightText = '["Visual Thinking", "GitHub", "Any"]';
console.log(checkArray(rightText)); // true
-3
Jeremy Thille 16 Сен 2021 в 14:28