我正在用 javascript 编写一个正则表达式来替换空格except,当:
- 一些特定的语法是在的空白
- 用单引号和双引号括起来(排除引号内的转义引号)
现在,我有很大一部分工作。它匹配所有在空格前面没有特定语法的模式,但是,我坚持使用引号部分。
return str.replace(/(function|new|return|var)?\s/g, function($0, $1) {
return $1 ? $0 : '';
});
我已经做了很多测试,但就是想不通。提前致谢。
最佳答案
您可以使用:
var str = "foo \"b a \\\" r\" new y 'l o l' foo lol; var x = new 'fo \\' o' ";
var result = str.replace(/(function|new|return|var)?\s+(?=(?:[^\\"']|\\.)*(?:(?:"(?:[^\\"]|\\.)*"|'(?:[^\\']|\\.)*'))*(?:[^\\"']|\\.)*$)/gm,
function($0, $1) { return $1 ? $0 : ''; });
Perl /x
形式的前瞻部分:
s/
\s+
(?=
(?:[^\\"']|\\.)*
(?:
(?:
"(?:[^\\"]|\\.)*"
|
'(?:[^\\']|\\.)*'
)
)*
(?:[^\\"']|\\.)*$
)
//xmg;
注意:正如我之前所说,这不是解析 JS 的好方法,并且会在评论、正则表达式引用以及谁知道还有什么时中断。
注意 2: 忘记补充一点,这仅适用于“有效”引用,所有引用都必须关闭。
关于Javascript 不匹配用引号括起来的 str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623493/