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

回答編集履歴

3

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

2015/11/28 17:30

投稿

think49
think49

スコア18194

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

2

数値の正規表現を修正

2015/11/28 17:30

投稿

think49
think49

スコア18194

answer CHANGED
@@ -19,10 +19,10 @@
19
19
 
20
20
  ```JavaScript
21
21
  // 通常版
22
- /(?:(?![a-zA-Z]|@[a-hA-H]|#\d)[\s\S])+/
22
+ /(?:(?![a-zA-Z]|@[a-hA-H]|#[1-9])[\s\S])+/
23
23
 
24
24
  // 最適化版
25
- /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#\d)[@#][^a-zA-Z@#]*)*/
25
+ /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#[1-9])[@#][^a-zA-Z@#]*)*/
26
26
  ```
27
27
 
28
28
  Re: sounisi5011さん

1

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

2015/11/28 15:18

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,3 +1,5 @@
1
+ > /[a-z]|@[0-9]|#[0-9]/
2
+
1
3
  素直に正規表現を書くと次のように書けます。
2
4
 
3
5
  ```JavaScript
@@ -10,4 +12,17 @@
10
12
  /([^a-z@#]*(?:(?![a-z]|[@#]\d)[@#])+)+/
11
13
  ```
12
14
 
15
+ **(2015/11/29 00:00追記)**
16
+ 質問文の正規表現条件が変更された為、回答を追記しました。
17
+
18
+ > /[a-z]|@[A-H]|#[1-9]/
19
+
20
+ ```JavaScript
21
+ // 通常版
22
+ /(?:(?![a-zA-Z]|@[a-hA-H]|#\d)[\s\S])+/
23
+
24
+ // 最適化版
25
+ /[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#\d)[@#][^a-zA-Z@#]*)*/
26
+ ```
27
+
13
28
  Re: sounisi5011さん