首页 > 解决方案 > 以引号开头但不以转义字符开头的字符串的正则表达式

问题描述

我必须找到一个以双引号开头和结尾的字符串,然后更改它的颜色。但是如果有转义字符(/)带引号,那么它不会被认为是字符串,颜色也不会改变。

例如:

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

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

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

标签: javascriptregex

解决方案


一个可能的解决方案是使用JSON.parse(),因为字符串 like"hello" 也是有效的 JSON 对象,而字符串 like"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));
});

推荐阅读