Regex для строки, начинающейся с кавычки, но не с escape-символа - PullRequest
0 голосов
/ 16 апреля 2019

Я должен найти строку, которая начинается и заканчивается двойными кавычками, а затем меняет цвет. Но если есть экранирующий символ (/) с кавычкой, он не будет считаться строкой и цвет не изменится.

Например:

  1. "привет"
  2. \ "Привет \"

Первый пример будет рассматриваться как строка, а второй пример не будет рассматриваться как строка.

Как написать регулярное выражение в javascript, которое возвращает только строку, которая начинается и заканчивается двойными кавычками, но там не должно быть escape-символа (/)

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Возможным решением будет использование JSON.parse(), поскольку строка типа "hello" также является допустимым объектом JSON, а строка типа "hello\" - нет.

function checkString(str){
    try {
        // let's try to parse the string as a JSON object
        const parsed = JSON.parse(str);
        // check if the result is a valid javascript string
        return (parsed === String(parsed));
    }
    catch(error){
        return false;
    }
}

РЕДАКТИРОВАТЬ:

Если у вас есть массив объектов, и вам нужно найти, какой объект является допустимой строкой, вы можете сделать это:

const strings = ['"valid string"', '"not valid string\\"'];
const validStrings = strings.filter((e) => {
    return (e === String(e) && checkString(e));
});
0 голосов
/ 16 апреля 2019

Вы можете использовать этот шаблон

^(?!.*\/)".*"$
  • ^ - начало строки
  • (?!.*\\) - условие, чтобы избежать любых \
  • " - Матчи "
  • .* - соответствует всему, кроме новой строки
  • $ - конец строки

const strings = [`"hello"`, `\\"hello\\"`, `\\"hello`, `hello"\\`, `"hel/lo"`,];
strings.forEach(s => {
  if(/^(?!.*\\)".*"$/.test(s)){
    console.log(s)
  }
});
0 голосов
/ 16 апреля 2019

Здесь не нужно регулярное выражение - простая проверка первого символа с помощью charAt:

const strings = [`"hello"`, `\\"hello\\"`];
strings.forEach(s => console.log(s.charAt(0) == `"`));

Если вам действительно нужно регулярное выражение:

const strings = [`"hello"`, `\\"hello\\"`];
const regex = /^[\"]/;
strings.forEach(s => console.log(regex.test(s)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...