回答編集履歴

3

Array\.prototype\.indexOf のコードを追加

2016/02/24 04:21

投稿

think49
think49

スコア18166

test CHANGED
@@ -1,3 +1,7 @@
1
+ # String.prototype.indexOf を使う(部分一致)
2
+
3
+
4
+
1
5
  `String.prototype.search` は正規表現オブジェクトでコストが高いので `String.prototype.indexOf` が良いと思います。
2
6
 
3
7
  node.js で使えるか分かりませんが、可能なら `String.prototype.includes` の方が高速かもしれません(ブラウザの最適化による)。
@@ -54,4 +58,48 @@
54
58
 
55
59
 
56
60
 
61
+ # Array.prototype.indexOf を使う(完全一致)
62
+
63
+
64
+
65
+ 単語の照合が完全一致でよければ `Array.prototype.indexOf` を利用可能です。
66
+
67
+ また、`input` を `split` で分解した単語数が `words` の単語数(300)を下回っている場合は検索対象を逆転する事で繰り返し処理の回数を下げる事が可能です。
68
+
69
+
70
+
71
+ ```JavaScript
72
+
73
+ 'use strict';
74
+
75
+ var words = ['sample', 'alert', 'community'],
76
+
77
+ input = '<a>abcabacaa,sample,aaaaa</a>'.replace(/^<[^>]*>|<[^>]*>$/g, '').split(','),
78
+
79
+ i = input.length;
80
+
81
+
82
+
83
+ while (i--) {
84
+
85
+ if (words.indexOf(input[i]) !== -1) {
86
+
87
+ // フラグ変数 match を使わず、ここでマッチした時の処理もやっておく
88
+
89
+ console.log(input[i]); // "sample"
90
+
91
+ break;
92
+
93
+ }
94
+
95
+ }
96
+
97
+ ```
98
+
99
+
100
+
101
+ **(2016/02/24 13:20追記) Array.prototype.indexOf のコードを追加しました。**
102
+
103
+
104
+
57
105
  Re: fagai さん

2

バグ修正

2016/02/24 04:21

投稿

think49
think49

スコア18166

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- input = input.replace(/^<[^>]*>|<[^>]*>$/g); // 余計な文字列は削っておく
19
+ input = input.replace(/^<[^>]*>|<[^>]*>$/g, ''); // 余計な文字列は削っておく
20
20
 
21
21
 
22
22
 

1

input の余計な文字列削除処理を追加

2016/02/24 04:05

投稿

think49
think49

スコア18166

test CHANGED
@@ -13,6 +13,10 @@
13
13
  input = '<a>abcabacaa,sample,aaaaa</a>',
14
14
 
15
15
  i = words.length;
16
+
17
+
18
+
19
+ input = input.replace(/^<[^>]*>|<[^>]*>$/g); // 余計な文字列は削っておく
16
20
 
17
21
 
18
22