以引号开头但不以转义字符开头的字符串的正则表达式

时间:2019-04-16 09:03:41

标签: javascript regex

我必须找到一个以双引号开头和结尾的字符串,然后更改其颜色。但是,如果转义字符(/)带有引号,则不会将其视为字符串,并且颜色也不会更改。

例如:

  1. “你好”
  2. \“你好\”

第一个示例将被视为字符串,而第二个示例将不被视为字符串。

如何在javascript中编写正则表达式,该正则表达式仅返回以双引号开头和结尾的字符串,但不应包含任何转义符(/)

3 个答案:

答案 0 :(得分:0)

这里不需要正则表达式-使用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)));

答案 1 :(得分:0)

一种可能的解决方案是使用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));
});

答案 2 :(得分:0)

您可以使用此模式

^(?!.*\/)".*"$
  • ^-字符串的开头
  • (?!.*\\)-避免出现任何\
  • 的条件
  • "-匹配"
  • .*-匹配除换行以外的所有内容
  • $-字符串结尾

const strings = [`"hello"`, `\\"hello\\"`, `\\"hello`, `hello"\\`, `"hel/lo"`,];
strings.forEach(s => {
  if(/^(?!.*\\)".*"$/.test(s)){
    console.log(s)
  }
});