質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

951閲覧

正規表現 特定の文字列を除外かつ.cssを含む

cheche0830

総合スコア187

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/04/10 08:36

編集2018/04/10 09:34
var arr = ['test.css', 'hoge.css', "test2.css"]; $.each(arr,function(index, elem) { p1 = /^(?!.*hoge).*$|.css$/; if(elem.match(p1)){ console.log(elem); } });

出力結果 console.log

test.css hoge.css test2.css

↑この出力結果を
↓のようにしたいのですが、

test.css test2.css

hogeが行に含まれる場合は除外したいのですが、
どのように書けばいいでしょうか?

条件追記いたします。
.cssはかならず含まれること
hoge.cssのみを除外。(hoge-test.css、hogehoge.cssなどは許容)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HayatoKamono

2018/04/10 09:26

xxx-hoge.cssは除外するのかしないのか等、もう少し、いろんなシナリオを追記されると良いかと思います。
cheche0830

2018/04/10 09:35

追記いたしました!
guest

回答3

0

OR条件

JavaScript

1p1 = /^(?!.*hoge).*$|.css$/; 2if(elem.match(p1)){

| はOR条件ですよ。
「かつ」ならAND条件にしなければなりません。

AND条件

個人的にはAND条件を一つの正規表現で書くことはお勧めしませんが、

.cssはかならず含まれること
hoge.cssのみを除外。(hoge-test.css、hogehoge.cssなどは許容)
.cssが末尾についてかつhogeを含まないものという条件になります。

いろいろと条件があるようなので、

JavaScript

1'use strict'; 2function isCssFileName (fileName) { 3 return /^(?!hoge.css$).*.css$/.test(fileName); 4} 5 6console.log(isCssFileName('hoge.css')); // false 7console.log(isCssFileName('hoge-test.css')); // true 8console.log(isCssFileName('hogehoge.css')); // true 9console.log(isCssFileName('foo.css')); // true 10console.log(isCssFileName('piyo')); // false 11console.log(isCssFileName('.css-piyo')); // false

正規表現を使わないコード

しかし、私があなたなら2回に分けてマッチさせます。
理由は前述のGitHubの記事で述べた通りです。

JavaScript

1'use strict'; 2function isCssFileName (fileName) { 3 return fileName !== 'hoge.css' && fileName.endsWith('.css'); 4} 5 6console.log(isCssFileName('hoge.css')); // false 7console.log(isCssFileName('hoge-test.css')); // true 8console.log(isCssFileName('hogehoge.css')); // true 9console.log(isCssFileName('foo.css')); // true 10console.log(isCssFileName('piyo')); // false 11console.log(isCssFileName('.css-piyo')); // false

Re: cheche0830 さん

投稿2018/04/10 10:37

think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cheche0830

2018/04/11 08:19

二回に分けるやりかたがありましたね!ありがとうございます!
guest

0

ベストアンサー

javascript

1var arr = ['test.css', 'testhogetest.css','testtest','test.csstest','hoge.css', 'test2.css']; 2arr.filter(function(v){ 3 return v.match(/^(?!.*?hoge).*?.css$/); 4}).forEach(function(v){ 5 console.log(v); 6});

※「末尾」が.cssという条件でしたので微調整しました

投稿2018/04/10 09:39

編集2018/04/10 09:42
yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cheche0830

2018/04/11 08:19

できました!ありがとうございます!
guest

0

javascript

1var arr = ['test.css', 'hoge.css', "test2.css"]; 2$.each(arr,function(index, elem) { 3 p1 = /^(?!.*hoge).*$/; 4 if(elem.match(p1)){ 5 console.log(elem); 6 document.write(elem + "<br>"); 7 } 8});

単純に正規表現の中の拡張子の部分を消したらできましたが、そういう意味ではなかったですか?

投稿2018/04/10 08:50

icegreen

総合スコア96

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cheche0830

2018/04/10 08:55

ありがとうございます。その場合ですと、 var arr = ['test.css', 'hoge.css', "test2"]; このような場合、test2もひろってしまうかと思いますので、 .cssが末尾についてかつhogeを含まないものという条件になります。
icegreen

2018/04/10 11:49

なるほど、では正規表現の最後の*を.cssにしたらいいかと思います。
cheche0830

2018/04/11 08:20

ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問