我有一个在 RegExr 中工作的正则表达式,但在浏览器中抛出了一个 Invalid Group 异常。我正在尝试删除所有单引号,除了那些在 s 之前的单引号,例如在 cat 中。我不确定问题出在哪里。顺便说一句,如您所见,我还删除了任何 -- 和 # 符号及其十六进制伙伴。
return str.replace(/(\%27)|(?<![a-z])'|'(?!s\b)|(\-\-)|(\%23)|(#)/gi, "-restricted-");
谢谢...
我有一个在 RegExr 中工作的正则表达式,但在浏览器中抛出了一个 Invalid Group 异常。我正在尝试删除所有单引号,除了那些在 s 之前的单引号,例如在 cat 中。我不确定问题出在哪里。顺便说一句,如您所见,我还删除了任何 -- 和 # 符号及其十六进制伙伴。
return str.replace(/(\%27)|(?<![a-z])'|'(?!s\b)|(\-\-)|(\%23)|(#)/gi, "-restricted-");
谢谢...
(?<![a-z])
是问题所在,因为 javascript 中不存在lookbehind。如果您想在 javascript 中对 regex 进行一些测试,请使用regexpal 之类的 javascript 在线工具。
我不知道您要做什么,但您可以尝试以下代码:
return str.replace(/%2[37]|(^|[^a-z])'|'(?!s\b)|--|#/gi, "$1-restricted-");
我已经用捕获组(即:字符串的开头或不是字母的字符)替换了否定的lookbehind (?<![a-z])
(即:前面没有字母) 。由于它不是像环视那样的简单检查,而是匹配,替换将删除这个“非字母”,然后我在替换模式中对第一个捕获组 ( ) 进行引用以自行替换它。(^|[^a-z])
$1