[英]Escape quote character within string in Javascript generated with PHP
[英]Regex for string starting with quote but not with escape character
我必须找到一个以双引号开头和结尾的字符串,然后更改其颜色。 但是如果有带引号的转义字符(/),那么它不会被视为字符串并且颜色不会改变。
例如:
第一个示例将被视为字符串,而第二个示例将不被视为字符串。
如何在javascript中编写一个regex,它只返回一个以双引号开头和结尾的字符串,但不应该有任何转义字符(/)
这里不需要正则表达式 - 使用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)));
一个可能的解决方案是使用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));
});
你可以使用这个模式
^(?!.*\/)".*"$
^
- 字符串的开始(?!.*\\\\)
- 避免任何\\
条件"
- 匹配"
.*
- 匹配除新行以外的任何内容$
- 字符串结束 const strings = [`"hello"`, `\\\\"hello\\\\"`, `\\\\"hello`, `hello"\\\\`, `"hel/lo"`,]; strings.forEach(s => { if(/^(?!.*\\\\)".*"$/.test(s)){ console.log(s) } });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.