我必须找到一个以双引号开头和结尾的字符串,然后更改其颜色。但是,如果转义字符(/)带有引号,则不会将其视为字符串,并且颜色也不会更改。
例如:
第一个示例将被视为字符串,而第二个示例将不被视为字符串。
如何在javascript中编写正则表达式,该正则表达式仅返回以双引号开头和结尾的字符串,但不应包含任何转义符(/)
答案 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)
}
});