回答編集履歴

3

"@H" で "H" にマッチする不具合を修正

2015/11/28 17:30

投稿

think49
think49

スコア18166

test CHANGED
@@ -1,54 +1,30 @@
1
- > /[a-z]|@[0-9]|#[0-9]/
1
+ `"@H"` や `"#1"` を消費する事で該当文字を読み飛ばせます。
2
-
3
-
4
-
5
- 素直に正規表現を書くと次のように書けます。
6
2
 
7
3
 
8
4
 
9
5
  ```JavaScript
10
6
 
7
+ function sample (string) {
8
+
9
+ return string.replace(/[a-z]+|@[A-H]|#[1-9]|([^a-z#@]*(?:(?:@[^a-zA-H]|#[^a-z1-9])[^a-z#@]*)*)/g, function (string, capture1) {
10
+
11
- /(?:(?![a-z]|[@#]\d)[\s\S])+/
11
+ return capture1 ? '<' + capture1 + '>' : string;
12
+
13
+ })
14
+
15
+ }
16
+
17
+
18
+
19
+ console.log(sample('hogeFOO@F123#1PIYOfoo')); // hoge<FOO>@F<123>#1<PIYO>foo
12
20
 
13
21
  ```
14
22
 
15
23
 
16
24
 
17
- 最適化を進めると次のようになります。
25
+ **(2015/11/29 02:30追記)**
18
26
 
19
-
20
-
21
- ```JavaScript
22
-
23
- /([^a-z@#]*(?:(?![a-z]|[@#]\d)[@#])+)+/
24
-
25
- ```
26
-
27
-
28
-
29
- **(2015/11/29 00:00追記)**
30
-
31
- 質問文の正規表現条件が変更された為、回答を追記しました。
32
-
33
-
34
-
35
- > /[a-z]|@[A-H]|#[1-9]/
36
-
37
-
38
-
39
- ```JavaScript
40
-
41
- // 通常版
42
-
43
- /(?:(?![a-zA-Z]|@[a-hA-H]|#[1-9])[\s\S])+/
44
-
45
-
46
-
47
- // 最適化版
48
-
49
- /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#[1-9])[@#][^a-zA-Z@#]*)*/
27
+ `@H` で `H` にマッチする正規表現を書いたり、質問の前提が変わって回答内容が変化したり、と追記を繰り返して分かりづらくなってしまったので回答全体を修正しました。
50
-
51
- ```
52
28
 
53
29
 
54
30
 

2

数値の正規表現を修正

2015/11/28 17:30

投稿

think49
think49

スコア18166

test CHANGED
@@ -40,13 +40,13 @@
40
40
 
41
41
  // 通常版
42
42
 
43
- /(?:(?![a-zA-Z]|@[a-hA-H]|#\d)[\s\S])+/
43
+ /(?:(?![a-zA-Z]|@[a-hA-H]|#[1-9])[\s\S])+/
44
44
 
45
45
 
46
46
 
47
47
  // 最適化版
48
48
 
49
- /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#\d)[@#][^a-zA-Z@#]*)*/
49
+ /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#[1-9])[@#][^a-zA-Z@#]*)*/
50
50
 
51
51
  ```
52
52
 

1

質問文の正規表現条件変更につき回答を追記

2015/11/28 15:18

投稿

think49
think49

スコア18166

test CHANGED
@@ -1,3 +1,7 @@
1
+ > /[a-z]|@[0-9]|#[0-9]/
2
+
3
+
4
+
1
5
  素直に正規表現を書くと次のように書けます。
2
6
 
3
7
 
@@ -22,4 +26,30 @@
22
26
 
23
27
 
24
28
 
29
+ **(2015/11/29 00:00追記)**
30
+
31
+ 質問文の正規表現条件が変更された為、回答を追記しました。
32
+
33
+
34
+
35
+ > /[a-z]|@[A-H]|#[1-9]/
36
+
37
+
38
+
39
+ ```JavaScript
40
+
41
+ // 通常版
42
+
43
+ /(?:(?![a-zA-Z]|@[a-hA-H]|#\d)[\s\S])+/
44
+
45
+
46
+
47
+ // 最適化版
48
+
49
+ /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#\d)[@#][^a-zA-Z@#]*)*/
50
+
51
+ ```
52
+
53
+
54
+
25
55
  Re: sounisi5011さん