1

これは私の好奇心を満たすための質問ですが、実際に助けが必要なわけではありませんが、あなたの助けに感謝します.

Javascript 正規表現を使用して正確な文字列を否定しようとしています。その考えは、文字列「www」を含む URL を除外することです。たとえば、このリスト:

http://www.example.org/
http://status.example.org/index.php?datacenter=1
https://status.example.org/index.php?datacenter=2
https://www.example.org/Insights
http://www.example.org/Careers/Job_Opportunities
http://www.example.org/Insights/Press-Releases

そのために、次の正規表現をうまく使用できます。

/^http(|s):..[^w]/g

これは正しく機能しますが、肯定的な一致を行うことはできますが、次のようなことはできません。

/[^www]/g  or  /[^http]/g

正確な文字列 www または http を含む行を除外するには。私はそのような悪名高い「否定的な先読み」を試しました:

/*(?: (?!www).*)/g 

しかし、これも機能しないか、オンラインでテストできません。Notepad ++でも機能しません。

Perl、Grep、Awk、または Textwrangler を使用していた場合は、次のようにするだけです。

!www   OR  !http

そして、これは仕事をしたでしょう。

だから、私の質問は明らかに: Javascript でそのようなことを行う正しい方法は何でしょうか? これは正規表現パーサーに依存しますか (私が理解しているようですか?)。

回答ありがとうございます;)

4

2 に答える 2

3

最初に否定的な先読みを追加する必要があります。

^(?!.*\bwww\.)https?:\/\/.*

デモ

(?!.*\bwww\.)否定先読みは、一致する文字列にwww.. \b単語の文字と単語以外の文字の間で一致する単語の境界を意味します。がなければ\bwww.正規表現で一致www.しますfoowww.

于 2015-01-13T14:37:28.593 に答える
0

入力文字列のすべての位置で「www」を否定するには:

var a = [
    'http://www.example.org/',
    'http://status.example.org/index.php?datacenter=1',
    'https://status.example.org/index.php?datacenter=2',
    'https://www.example.org/Insights',
    'http://www.example.org/Careers/Job_Opportunities',
    'http://www.example.org/Insights/Press-Releases'
];
a.filter(function(x){ return /^((?!www).)*$/.test(x); });

したがって、すべての位置で「www」が一致しないことを確認してから、任意の文字 ( .) に一致します。

于 2015-01-13T15:05:28.183 に答える