JSLint报告“;不安全'^'”;关于^&(一)&引用;来自JavaScript:好的部分-忽略?

JSLint报告“;不安全'^'”;关于^&(一)&引用;来自JavaScript:好的部分-忽略?,javascript,regex,Javascript,Regex,包含以下正则表达式: /&([^&;]+);/g 用于查找所有HTML实体,如。如果使用JSLint验证此代码,它将报告 不安全的“^” 虽然严格来说这是正确的,但我仍然认为忽略它是好的。是否?为实际问题提供答案。如果你知道为什么它是不安全的,并同意它,忽略它。如果你对JSLint的抱怨感到恼火,那就解决它。;) 我认为它是安全的。 < P>为实际问题提供答案。如果你知道为什么它是不安全的,并同意它,忽略它。如果你对JSLint的抱怨感到恼火,那就解决它。;) 我认为它足够安全

包含以下正则表达式:

/&([^&;]+);/g
用于查找所有HTML实体,如
。如果使用JSLint验证此代码,它将报告

不安全的“^”


虽然严格来说这是正确的,但我仍然认为忽略它是好的。是否?

为实际问题提供答案。如果你知道为什么它是不安全的,并同意它,忽略它。如果你对JSLint的抱怨感到恼火,那就解决它。;)


我认为它是安全的。

< P>为实际问题提供答案。如果你知道为什么它是不安全的,并同意它,忽略它。如果你对JSLint的抱怨感到恼火,那就解决它。;)


我认为它足够安全。

警告正则表达式可能比预期的更匹配,并且警告它是正确的;它将匹配如下内容“
&abc def ghi;
”,尽管它们是非法的实体名称。另一方面,在这种情况下,这可能不是一个严重的问题(尽管这严格取决于匹配后的操作);您可以很容易地在JSLint中禁用它

更好的RE应该是:

/&(#[0-9]+|#[xX][a-fA-F0-9]+|[a-zA-Z0-9]+);/

唉,我记不起实体名称中允许使用哪些其他字符了。

这是一个警告,正则表达式可能比预期的匹配得多,对此发出警告是正确的;它将匹配如下内容“
&abc def ghi;
”,尽管它们是非法的实体名称。另一方面,在这种情况下,这可能不是一个严重的问题(尽管这严格取决于匹配后的操作);您可以很容易地在JSLint中禁用它

更好的RE应该是:

/&(#[0-9]+|#[xX][a-fA-F0-9]+|[a-zA-Z0-9]+);/

唉,我记不起实体名称中允许使用哪些其他字符。

它不应该是
/&([^&;]+?)/g
?在正则表达式工作之前,您需要一个
{1,10}
或其他东西-目前它不会匹配
(但会匹配
)。@RichieHindle不,劳希是对的。这应该是一场懒惰的比赛。此外,问题与此无关。@rausch,你是对的——几乎是对的。我忘了一个“+”。Crockford书中的代码示例中有“+”。哦,有人刚刚编辑了我的帖子来解决这个问题,谢谢。@SalmanA,我知道JSLint想告诉我什么。如果我必须重写正则表达式以避免“^”,我基本上必须列出在HTML实体中实际找到的所有字符。这在我看来是不切实际的。它不应该是
/&([^&;]+?)/g
?在正则表达式工作之前,您需要一个
{1,10}
或其他东西-目前它不会匹配
(但会匹配
)。@RichieHindle不,劳希是对的。这应该是一场懒惰的比赛。此外,问题与此无关。@rausch,你是对的——几乎是对的。我忘了一个“+”。Crockford书中的代码示例中有“+”。哦,有人刚刚编辑了我的帖子来解决这个问题,谢谢。@SalmanA,我知道JSLint想告诉我什么。如果我必须重写正则表达式以避免“^”,我基本上必须列出在HTML实体中实际找到的所有字符。在我看来这是不切实际的。