匹配除少数字符外的ASCII字符

6

我有一个正则表达式,可以匹配所有的ASCII字符:

/^[\x00-\x7F]*$/

现在我需要从这个范围中排除以下字符:'"。我该怎么做?

您可以参考此链接:https://dev59.com/4nNA5IYBdhLWcg3wAI3e - Calyfs0
3个回答

5
你可以使用负向先行断言来排除不允许的字符:
/^((?!['"])[\x00-\x7F])*$/

RegEx演示

(?!['"])是负向前瞻,用于禁止输入中的单引号或双引号。


请您详细解释一下这个负向先行断言在这个特定的正则表达式中是如何工作的?我已经阅读了关于先行断言的教程,但似乎无法理解这个特定的先行断言是如何工作的。特别是我想知道为什么它不仅适用于一个字符。提前感谢您的回答! - Max Koretskyi
['"]将匹配'"(?!['"])是负向先行断言,它断言下一个字符位置不是'" - anubhava
当前输入位置后面的下一个字符。请阅读这篇好的教程:http://www.regular-expressions.info/lookaround.html - anubhava

3

您可以通过以下方式从一个范围中排除字符

/^(?![\.])[\x00-\x7F]*$/

在正则表达式匹配中使用(?![\.])前缀来排除.

或者在您的情况下

/^(?!['"])[\x00-\x7F]*$/

编辑:

将正则表达式用大括号包裹起来以匹配多次。

/^((?!['"])[\x00-\x7F])*$/

不,不是这样子的。^(?![\.])[\x00-\x7F]*$匹配一些不以句点开头的字符串。在字符类中\是多余的。 - Wiktor Stribiżew
@WiktorStribiżew 谢谢,已经纠正了多次匹配的错误。 - gurvinder372

1
迄今为止最简单的解决方案是:

IMO

/^[\x00-\x21\x23-\x26\x28-\x7F]*$/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接