teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

11

括弧の部分を訂正しました

2019/06/17 00:54

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -2,13 +2,13 @@
2
2
  正規表現について知りたいです。宜しくお願い致します。
3
3
 
4
4
  このようなvalueがあります。
5
- ``<input type="textarea" value="[いぬ[の]] しっぽ] [ねこのしっぽ]いぬ ねこ ">``
5
+ ``<input type="textarea" value="[いぬ[の] しっぽ] [ねこのしっぽ]いぬ ねこ ">``
6
6
 
7
7
  ここから、下記➀➁の配列を取得することは可能でしょうか?
8
8
 
9
9
  ###取得したい配列
10
10
  ➀「一番外側の括弧」という単位で配列
11
- ``Array [ "いぬ[の]] しっぽ", "ねこのしっぽ" ]``
11
+ ``Array [ "いぬ[の] しっぽ", "ねこのしっぽ" ]``
12
12
 
13
13
  ➁それ以外の文字列でスペース単位の配列
14
14
  ``Array [ "いぬ", "ねこ" ]``
@@ -16,7 +16,7 @@
16
16
  ###注意したい点
17
17
  ・括弧の入れ子の数は不明です。
18
18
 
19
- ・括弧セットになっているかどうか、などは不明です。(ご覧のように``[いぬ[の]] しっぽ]``の括弧セットになっていません。)
19
+ ・括弧は必ずセットになります。(たとえば``[いぬ[の]] しっぽ]``のように括弧セットにならなということはありません。)
20
20
 
21
21
  ###試したこと
22
22
  なんとなく大枠の流れはできたのですが、やはり正規表現の部分で躓いています。
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
  ```ここに言語を入力
29
- <input type="textarea" value="[いぬ[の]] しっぽ] [ねこのしっぽ]いぬ ねこ ">
29
+ <input type="textarea" value="[いぬ[の] しっぽ] [ねこのしっぽ]いぬ ねこ ">
30
30
 
31
31
  $('input').on('input', function() {
32
32
 

10

valueの値を修正しました

2019/06/17 00:54

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -2,37 +2,51 @@
2
2
  正規表現について知りたいです。宜しくお願い致します。
3
3
 
4
4
  このようなvalueがあります。
5
+ ``<input type="textarea" value="[いぬ[の]] しっぽ] [ねこのしっぽ]いぬ ねこ ">``
5
6
 
6
- ``<input type="textarea" value="[ね] いぬ [いぬ[] っぽ]">``
7
+ こから、下記➀➁配列を取得することは可能でょうか?
7
8
 
9
+ ###取得したい配列
10
+ ➀「一番外側の括弧」という単位で配列
8
- ここから、``Array [ "ねこ", "いぬ[の] しっぽ" ]``という配列を取得したいのですが、可能でしょうか?
11
+ ``Array [ "いぬ[の]] しっぽ", "ねこのしっぽ" ]``
9
12
 
13
+ ➁それ以外の文字列でスペース単位の配列
10
- つまり、「一番外側の括弧」とう単位で配列を取得したいという意味です。
14
+ ``Array [ "ぬ", "ねこ" ]``
11
15
 
16
+ ###注意したい点
17
+ ・括弧の入れ子の数は不明です。
12
18
 
19
+ ・括弧がセットになっているかどうか、などは不明です。(ご覧のように``[いぬ[の]] しっぽ]``の括弧はセットになっていません。)
20
+
13
21
  ###試したこと
14
22
  なんとなく大枠の流れはできたのですが、やはり正規表現の部分で躓いています。
15
23
  下記ですと「一番外側の括弧」ではなく「括弧が出現するたびに」という感じになってしまいます。
16
24
 
17
25
  どうすればいいか教えて頂けませんでしょうか。
18
26
 
19
- サンプル→[https://jsfiddle.net/v26pL5rj/](https://jsfiddle.net/v26pL5rj/)
27
+
20
28
  ```ここに言語を入力
21
- <input type="textarea" value="[ねこ] いぬ [いぬ[の] しっぽ]">
29
+ <input type="textarea" value="[いぬ[の]] しっぽ] [ねこのしっぽ]いぬ ねこ ">
22
30
 
23
31
  $('input').on('input', function() {
24
32
 
25
33
  // 入力値を取得
26
34
  const inputVal = $(this).val();
27
35
 
28
- // 「一番外側の括弧」という単位で配列を取得したい
36
+ // 「一番外側の括弧」という単位で配列
29
37
  const range = /[([^[] ]+)/g; // ここで「一番外側の括弧」という指定がしたい
30
38
  let match;
31
39
  let rangeArr = [];
32
40
  while ( (match = range.exec(inputVal))!== null ) {
33
41
  rangeArr.push(match[1]);
34
42
  }
43
+ console.log( 'rangeArr' );
35
44
  console.log( rangeArr );
36
45
 
46
+ // ➁それ以外の文字列でスペース単位の配列
47
+ const spaceArr = inputVal.replace(range,'').split(/[\u3000&\x20;]/g);
48
+ console.log( 'spaceArr' );
49
+ console.log( spaceArr );
50
+
37
51
  });
38
52
  ```

9

リンク先とコードをすこし訂正しました

2019/06/17 00:51

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  ここから、``Array [ "ねこ", "いぬ[の] しっぽ" ]``という配列を取得したいのですが、可能でしょうか?
9
9
 
10
- つまり、「一番外側の括弧だけ」を抽出したいという意味です。
10
+ つまり、「一番外側の括弧」という単位で配列取得したいという意味です。
11
11
 
12
12
 
13
13
  ###試したこと
@@ -16,7 +16,7 @@
16
16
 
17
17
  どうすればいいか教えて頂けませんでしょうか。
18
18
 
19
- サンプル→[https://jsfiddle.net/us40qt3L/](https://jsfiddle.net/us40qt3L/)
19
+ サンプル→[https://jsfiddle.net/v26pL5rj/](https://jsfiddle.net/v26pL5rj/)
20
20
  ```ここに言語を入力
21
21
  <input type="textarea" value="[ねこ] いぬ [いぬ[の] しっぽ]">
22
22
 
@@ -25,11 +25,11 @@
25
25
  // 入力値を取得
26
26
  const inputVal = $(this).val();
27
27
 
28
- // 「一番外側の括弧」の範囲で配列したい
28
+ // 「一番外側の括弧」という単位で配列を取得したい
29
- const range = /[([^[] ]+)/g; // こはできな
29
+ const range = /[([^[] ]+)/g; // こ「一番外側の括弧」とう指定がしたい
30
30
  let match;
31
31
  let rangeArr = [];
32
- while ((match = range.exec(inputVal))!== null) {
32
+ while ( (match = range.exec(inputVal))!== null ) {
33
33
  rangeArr.push(match[1]);
34
34
  }
35
35
  console.log( rangeArr );

8

inputのvalue値を訂正いたしました

2019/06/17 00:03

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -3,11 +3,11 @@
3
3
 
4
4
  このようなvalueがあります。
5
5
 
6
- ``<input type="textarea" value="ねこ いぬ [いぬ[の] しっぽ]">``
6
+ ``<input type="textarea" value="[ねこ] いぬ [いぬ[の] しっぽ]">``
7
7
 
8
- ここから、``Array [ "いぬ[の] しっぽ" ]``という配列を取得したいのですが、可能でしょうか?
8
+ ここから、``Array [ "ねこ", "いぬ[の] しっぽ" ]``という配列を取得したいのですが、可能でしょうか?
9
9
 
10
- つまり、「一番外側の括弧」抽出したいという意味です。
10
+ つまり、「一番外側の括弧だけ抽出したいという意味です。
11
11
 
12
12
 
13
13
  ###試したこと
@@ -18,7 +18,7 @@
18
18
 
19
19
  サンプル→[https://jsfiddle.net/us40qt3L/](https://jsfiddle.net/us40qt3L/)
20
20
  ```ここに言語を入力
21
- <input type="textarea" value="ねこ いぬ [いぬ[の] しっぽ]">
21
+ <input type="textarea" value="[ねこ] いぬ [いぬ[の] しっぽ]">
22
22
 
23
23
  $('input').on('input', function() {
24
24
 
@@ -35,8 +35,4 @@
35
35
  console.log( rangeArr );
36
36
 
37
37
  });
38
-
39
-
40
-
41
-
42
38
  ```

7

コードのミスを訂正しました

2019/06/16 23:54

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  サンプル→[https://jsfiddle.net/us40qt3L/](https://jsfiddle.net/us40qt3L/)
20
20
  ```ここに言語を入力
21
- <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
21
+ <input type="textarea" value="ねこ いぬ [いぬ[] しっぽ]">
22
22
 
23
23
  $('input').on('input', function() {
24
24
 

6

質問を1つに絞りました

2019/06/16 23:46

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- JavaScriptの正規表現につ
1
+ JavaScriptの正規表現で、「一番外側の括弧」で抽出した
body CHANGED
@@ -3,33 +3,20 @@
3
3
 
4
4
  このようなvalueがあります。
5
5
 
6
- <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
6
+ ``<input type="textarea" value="ねこ いぬ [いぬ[] しっぽ]">``
7
7
 
8
- ここから下記➀➁の配列を取得したいのですが、その書き方を教えていただけませんでしょうか?
8
+ ここから、``Array [ "いぬ[] しっぽ" ]``という配列を取得したいのですが、可能でしょうか?
9
9
 
10
- ###取得したい配列
11
- ➀ []の範囲だけの配列
12
- (例)``Array [ "いぬ っぽ" ]``という配列を取得したい
10
+ つまり、「一番外側括弧」で抽出たいという意味です
13
11
 
14
- ➁ それ以外のスペース区切りの配列
15
- (例)``Array [ "ねこ", "いぬ" ]``という配列を取得したい。
16
12
 
17
- ###発生ている問題
13
+ ###たこと
18
- 下記コードで発生している問題りです。
14
+ なんとなく大枠流れできたですが、やは正規表現の部分躓いています。
15
+ 下記ですと「一番外側の括弧」ではなく「括弧が出現するたびに」という感じになってしまいます。
19
16
 
20
- ➀の問題
21
- ``[いぬの しっぽ]``ではなくて、``[いぬ[の しっぽ]``のように入力されたときに、``Array [ "いぬ", "の しっぽ" ]``という風に配列が区切られてしまう。
22
- →``Array [ "ぬ]の しっぽ" ]``とう風にたい
17
+ どうすればいいか教えて頂けませんでょうか
23
18
 
24
- ➁の問題
25
- 配列の最後に``]``が入り、こう(``Array [ "ねこ", "いぬ", "]" ]``)なってしまう。
26
- →``Array [ "ねこ", "いぬ" ]``という風にしたい。
27
-
28
-
29
- ###試したこと
30
- 正規表現というのを調べまして、次のようにしてみました。ですが上の問題が発生します。どうしたらいいか、教えていただけませんでしょうか。
31
-
32
- サンプル→ [https://jsfiddle.net/nmurvd1y/](https://jsfiddle.net/nmurvd1y/)
19
+ サンプル→[https://jsfiddle.net/us40qt3L/](https://jsfiddle.net/us40qt3L/)
33
20
  ```ここに言語を入力
34
21
  <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
35
22
 
@@ -38,23 +25,18 @@
38
25
  // 入力値を取得
39
26
  const inputVal = $(this).val();
40
27
 
41
- // []の範囲で配列にする
28
+ // 「一番外側括弧」の範囲で配列にしたい
42
- const range = /[([^[] ]+)/g;
29
+ const range = /[([^[] ]+)/g; // これではできない
43
30
  let match;
44
31
  let rangeArr = [];
45
32
  while ((match = range.exec(inputVal))!== null) {
46
33
  rangeArr.push(match[1]);
47
34
  }
48
- console.log( 'rangeArr' );
49
35
  console.log( rangeArr );
50
-
51
- // スペース区切りで配列にする
52
- const spaceArr = inputVal.replace(range,'').split(/[\u3000&\x20;]/g);
53
- console.log( 'spaceArr' );
54
- console.log( spaceArr );
55
36
 
56
37
  });
57
38
 
58
39
 
59
40
 
41
+
60
42
  ```

5

調べが進んだのでコードを修正しました

2019/06/16 23:19

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -5,18 +5,31 @@
5
5
 
6
6
  <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
7
7
 
8
- ここから下記➀➁の配列を取得したいのですが、その書き方を教えていただけませんでしょうか?
8
+ ここから下記➀➁の配列を取得したいのですが、その書き方を教えていただけませんでしょうか?
9
9
 
10
10
  ###取得したい配列
11
11
  ➀ []の範囲だけの配列
12
- (例) array( 'いぬの しっぽ' ) 」という配列を取得したい。
12
+ (例)``Array [ "いぬの しっぽ" ]``という配列を取得したい。
13
13
 
14
14
  ➁ それ以外のスペース区切りの配列
15
- (例) array( 'ねこ', 'いぬ' ) 」という配列を取得したい。
15
+ (例)``Array [ "ねこ", "いぬ" ]``という配列を取得したい。
16
16
 
17
+ ###発生している問題
18
+ 下記のコードで発生している問題は次の通りです。
17
19
 
20
+ ➀の問題
21
+ ``[いぬの しっぽ]``ではなくて、``[いぬ[の しっぽ]``のように入力されたときに、``Array [ "いぬ", "の しっぽ" ]``という風に配列が区切られてしまう。
22
+ →``Array [ "いぬ]の しっぽ" ]``という風にしたい。
23
+
24
+ ➁の問題
25
+ 配列の最後に``]``が入り、こう(``Array [ "ねこ", "いぬ", "]" ]``)なってしまう。
26
+ →``Array [ "ねこ", "いぬ" ]``という風にしたい。
27
+
28
+
18
- ###現状のコード
29
+ ###試したこと
19
- 正規表現というのを調べまして、次のようにしてみました。ですが上のように取得できせん。どうしたらいいか、教えていただけませんでしょうか。
30
+ 正規表現というのを調べまして、次のようにしてみました。ですが上の問題が発生し。どうしたらいいか、教えていただけませんでしょうか。
31
+
32
+ サンプル→ [https://jsfiddle.net/nmurvd1y/](https://jsfiddle.net/nmurvd1y/)
20
33
  ```ここに言語を入力
21
34
  <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
22
35
 
@@ -24,16 +37,24 @@
24
37
 
25
38
  // 入力値を取得
26
39
  const inputVal = $(this).val();
40
+
41
+ // []の範囲で配列にする
42
+ const range = /[([^[] ]+)/g;
43
+ let match;
44
+ let rangeArr = [];
45
+ while ((match = range.exec(inputVal))!== null) {
46
+ rangeArr.push(match[1]);
47
+ }
48
+ console.log( 'rangeArr' );
49
+ console.log( rangeArr );
27
50
 
28
- // []の範囲で配列にする
29
- const rangeArr = inputVal.split(/[([^[]$]+)/g);
30
-
31
51
  // スペース区切りで配列にする
32
- const spaceArr = inputVal.split(/[\u3000&\x20;]/g);
52
+ const spaceArr = inputVal.replace(range,'').split(/[\u3000&\x20;]/g);
53
+ console.log( 'spaceArr' );
54
+ console.log( spaceArr );
33
55
 
34
- // それぞれ片方だけ取得
56
+ });
35
- console.log( inputVal - spaceArr ); // ➀を取得?
36
- console.log( inputVal - rangeArr ); // ➁を取得?
37
57
 
38
- });
58
+
59
+
39
60
  ```

4

コードがおかしかったので直しました。

2019/06/16 22:50

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -8,11 +8,11 @@
8
8
  ここから下記の➀➁の配列を取得したいのですが、その書き方を教えていただけませんでしょうか?
9
9
 
10
10
  ###取得したい配列
11
- ➀[]の範囲を取得した配列
11
+ []の範囲だけの配列
12
- (例)「array('いぬの しっぽ')」という配列を取得したい。
12
+ (例)「 array( 'いぬの しっぽ' ) 」という配列を取得したい。
13
13
 
14
- ➁それ以外のスペース区切りの配列
14
+ それ以外のスペース区切りの配列
15
- (例)「array('ねこ','いぬ')」という配列を取得したい。
15
+ (例)「 array( 'ねこ', 'いぬ' ) 」という配列を取得したい。
16
16
 
17
17
 
18
18
  ###現状のコード
@@ -25,14 +25,15 @@
25
25
  // 入力値を取得
26
26
  const inputVal = $(this).val();
27
27
 
28
- // []の範囲で配列にする
28
+ // []の範囲で配列にする
29
29
  const rangeArr = inputVal.split(/[([^[]$]+)/g);
30
30
 
31
- // スペース区切りで配列にする
31
+ // スペース区切りで配列にする
32
- const inputArr = inputVal.split(/[\u3000&\x20;]/g);
32
+ const spaceArr = inputVal.split(/[\u3000&\x20;]/g);
33
33
 
34
34
  // それぞれ片方だけ取得
35
+ console.log( inputVal - spaceArr ); // ➀を取得?
35
- console.log( inputVal - rangeArr );
36
+ console.log( inputVal - rangeArr ); // ➁を取得?
36
- console.log( inputVal - inputArr );
37
+
37
38
  });
38
39
  ```

3

コードにミスがあったので直しました

2019/06/16 22:06

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
  ###現状のコード
19
- 正規表現というのを調べまして、次のようにしてみました。ですが上のように取得できません。下記がその問題のコードです。どうしたらいいか、教えていただけませんでしょうか。
19
+ 正規表現というのを調べまして、次のようにしてみました。ですが上のように取得できません。どうしたらいいか、教えていただけませんでしょうか。
20
20
  ```ここに言語を入力
21
21
  <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
22
22
 
@@ -30,7 +30,6 @@
30
30
 
31
31
  // ➁ スペース区切りで配列にする
32
32
  const inputArr = inputVal.split(/[\u3000&\x20;]/g);
33
- console.log( inputArr );
34
33
 
35
34
  // それぞれ片方だけ取得
36
35
  console.log( inputVal - rangeArr );

2

整理しました

2019/06/16 22:02

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
@@ -1,1 +1,1 @@
1
- スペースごと配列にし、さらに指定文字で囲まれてる場合は1まとまりにしたいです!
1
+ JavaScriptの正規表現
body CHANGED
@@ -1,41 +1,39 @@
1
+ ###実現したいこと
1
- <input type="textarea" id="search">
2
+ 正規表現について知りたいです。宜しくお願い致します。
2
3
 
3
- というテキストボックスへ入力値ついてのです
4
+ ようvalueあります。
4
5
 
5
- ・スペース区切りにする
6
- ・【】中は1つまとまりにする
6
+ <input type="textarea" value="ねこ いぬ [いぬ しっぽ]">
7
7
 
8
- という配列にするにはどうしたいいでしょうか?
8
+ ここから下記の➀➁の配列を取得したいのですが、その書き方を教えてただけませんでしょうか?
9
9
 
10
+ ###取得したい配列
10
- 例を挙げるとこような感じです。
11
+ ➀[]範囲を取得した配列
12
+ (例)「array('いぬの しっぽ')」という配列を取得したい。
11
13
 
12
- |ケース|入力値|取得する配列|
14
+ ➁それ以外のスペース区切りの配列
13
- |--|--|--|
14
- |ケース1|いぬ ねこ|['いぬ','ねこ']|
15
+ (例)「array('ねこ','いぬ')」という配列を取得したい。
15
- |ケース2|いぬ ねこ 【いぬの しっぽ】|['いぬ','ねこ','いぬのしっぽ']|
16
16
 
17
- 上の表のように、ケース1では普通にスペース区切りで配列にしています。
18
17
 
18
+ ###現状のコード
19
- してケース2ですが、【いぬ しっぽ】はスペースがあるけど【】れてら1つのまとまりになっていま
19
+ 正規表現というのを調べまして、次のようにしてみました。ですがよう取得せん。下記がその問題のコードです。どうしたら、教えていただけせんでしょうか
20
+ ```ここに言語を入力
21
+ <input type="textarea" value="ねこ いぬ [いぬの しっぽ]">
20
22
 
21
- コードのイメージとしては下記のようなイメージで、あまりよくわかっていませんが、よろしくお願い致します。
22
- ```jQuery
23
- $('#search').input(function() {
23
+ $('input').on('input', function() {
24
24
 
25
+ // 入力値を取得
25
26
  const inputVal = $(this).val();
26
27
 
28
+ // ➀ []の範囲で配列にする
29
+ const rangeArr = inputVal.split(/[([^[]$]+)/g);
30
+
27
- // 入力値をスペースごとに配列にして取得
31
+ // スペース区切りで配列にする
28
32
  const inputArr = inputVal.split(/[\u3000&\x20;]/g);
29
-
30
- // []で区切られていたら1まとまりにして、それ以外はそのままで配列を作る
31
- const searchArr = [];
32
- if( '[]'.indexOf(inputArr) != -1 ){
33
- searchArr =
34
- }
35
- else{
36
- searchArr =
37
- }
38
-
39
- console.log( searchArr );
33
+ console.log( inputArr );
34
+
35
+ // それぞれ片方だけ取得
36
+ console.log( inputVal - rangeArr );
37
+ console.log( inputVal - inputArr );
40
38
  });
41
39
  ```

1

かっこを変更

2019/06/16 22:01

投稿

kamekamekame
kamekamekame

スコア16

title CHANGED
File without changes
body CHANGED
@@ -1,23 +1,24 @@
1
- <input type="textarea">
1
+ <input type="textarea" id="search">
2
2
 
3
- への入力値ついてなのですが
3
+ というテキストボックスへの入力値ついてなのですが
4
4
 
5
- ・スペース区切り
5
+ ・スペース区切りにする
6
- []の中は1つまとまり
6
+ 【】の中は1つまとまりにする
7
7
 
8
- という配列で取得するにはどうしたらいいでしょうか?
8
+ という配列するにはどうしたらいいでしょうか?
9
9
 
10
10
  例を挙げるとこのような感じです。
11
11
 
12
12
  |ケース|入力値|取得する配列|
13
13
  |--|--|--|
14
14
  |ケース1|いぬ ねこ|['いぬ','ねこ']|
15
- |ケース2|いぬ ねこ [いぬの しっぽ]|['いぬ','ねこ','いぬのしっぽ']|
15
+ |ケース2|いぬ ねこ いぬの しっぽ|['いぬ','ねこ','いぬのしっぽ']|
16
16
 
17
- 上の表のように、ケース1では普通にスペースごとに配列にしています。
17
+ 上の表のように、ケース1では普通にスペース区切りで配列にしています。
18
- そしてケース2ですが、「いぬの しっぽ」にはスペースがあるけど[]で囲まれているから1つのまとまりになっています。
19
18
 
19
+ そしてケース2ですが、【いぬの しっぽ】にはスペースがあるけど【】で囲まれているから1つのまとまりになっています。
20
+
20
- コードのイメージとしてはのようなイメージで、あまりよくわかっていませんが、よろしくお願い致します。
21
+ コードのイメージとしては下記のようなイメージで、あまりよくわかっていませんが、よろしくお願い致します。
21
22
  ```jQuery
22
23
  $('#search').input(function() {
23
24