Javascript 如何剥离模糊的电子邮件标题

Javascript 如何剥离模糊的电子邮件标题,javascript,regex,Javascript,Regex,我正在尝试编写一个regex垃圾邮件过滤器,它将阻止以下主题: Subject: ..B..R..E_G-U E_T..___W..A..T..C..H-E S -_A T-___C H_E-A..P___P R-I_C E! . -G_U..C..C_I..-..W_A_T C-H E_S---..A..T __C-H..E A P_--..P_R..I C..E ..C_H..O_P..A_R D---W-A T-C_H E S -- A_T.._-C..H-E A P_--P..R..I

我正在尝试编写一个regex垃圾邮件过滤器,它将阻止以下主题:

Subject:
..B..R..E_G-U E_T..___W..A..T..C..H-E S -_A T-___C H_E-A..P___P R-I_C E! .
-G_U..C..C_I..-..W_A_T C-H E_S---..A..T __C-H..E A P_--..P_R..I C..E
..C_H..O_P..A_R D---W-A T-C_H E S -- A_T.._-C..H-E A P_--P..R..I C_E! 
我能够想出:

w([^a-zA-Z0-9]){1,3}a([^a-zA-Z0-9]){1,3}t([^a-zA-Z0-9]){1,3}c([^a-zA-Z0-9]){1,3}h([^a-zA-Z0-9]){1,3}e([^a-zA-Z0-9]){1,3}s([^a-zA-Z0-9]){1,6}
为了捕捉“手表”的标准变体,尽管我怀疑如果它们开始使用Unicode拼写,它是否会捕捉到它们。更不用说它不仅不优雅,而且丑陋得让我的猫想把它埋了

什么是更好的方法


看起来Mozilla正在使用Javascript格式的正则表达式--

您的正则表达式似乎可以工作,但如果您只是想清理一下,请尝试以下方法:

w[\w\u]+a[\w\u]+t[\w\u]+c[\w\u]+h[\w\u]+e[\w\u]+s

我不认为更优雅,但它更干净。

使用
\W
表示“非单词字符”(它是
[^A-Za-z0-9\]
的简写形式),并结合
\
以与您相同的含义结束:
[^A-Za-z0-9]

使用
+
而不是带有特定数量的量词,因为量词可能会有所不同,而且每个点中至少有一个表示垃圾邮件

如果您想尝试更优雅的方式来捕捉相同模式中的其他主题(这正是正则表达式的优点),请使用以下方法:


(\w[\w\u]+){4,}

我认为正则表达式不是所有问题的答案,当然,有时它是您唯一的工具。如果标题中有过多的非字母数字字符,将其标记为垃圾邮件如何?对不起,我认为是javascript Regexa。您是否尝试在客户端中过滤邮件(可能是Thunderbird?)或者您是否有自己的邮件服务器,您正在尝试为其实现这些规则(如使用Sieve的后缀)?这是在Thunderbird中,使用filtaQuilla add onu时\W将不会获得下划线(u):(我将大约一百个电子邮件标题加载到一个文件中进行测试。使用
(\W[\W\u]+){4,}
它匹配了我想要的潜水艇,但也匹配了一些我不明白的潜水艇:
我们把这个发到哪里?
你的Amazon.com订单已经发货(#999-1234567-8901234)
国会正在攻击华盛顿特区…
。事实上,我确实理解最后一个,带有“D.C.”,但它只匹配了最后两个字符“我们把这个发送到哪里去呢?”,当我在文件的其他地方复制同一行时,它不匹配,只有一个实例。“Amazon”标题截断了“has”之后的所有内容。
w[\w\u]+a[\w\u]+t[\w\u]+c[\w\u]+h[\w\u]+e[\w\u]+除非“watchs”单词上的两个字符在一起,中间没有任何字符,否则s就可以正常工作。在这种情况下,它会失败。我将它改为
w[\w\u]*a[\w\u]*t[\w\u]*c[\w\u]*h[\w\u]*e[\w\u]*s
,虽然仍然冗长,但它的工作方式最好,比我的工作方式优雅得多。谢谢!