回答編集履歴
3
"@H" で "H" にマッチする不具合を修正
answer
CHANGED
@@ -1,28 +1,16 @@
|
|
1
|
-
|
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
|
-
|
6
|
+
return capture1 ? '<' + capture1 + '>' : string;
|
7
|
-
|
7
|
+
})
|
8
|
+
}
|
8
9
|
|
9
|
-
最適化を進めると次のようになります。
|
10
|
-
|
11
|
-
```JavaScript
|
12
|
-
|
10
|
+
console.log(sample('hogeFOO@F123#1PIYOfoo')); // hoge<FOO>@F<123>#1<PIYO>foo
|
13
11
|
```
|
14
12
|
|
15
|
-
**(2015/11/29
|
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
数値の正規表現を修正
answer
CHANGED
@@ -19,10 +19,10 @@
|
|
19
19
|
|
20
20
|
```JavaScript
|
21
21
|
// 通常版
|
22
|
-
/(?:(?![a-zA-Z]|@[a-hA-H]|#
|
22
|
+
/(?:(?![a-zA-Z]|@[a-hA-H]|#[1-9])[\s\S])+/
|
23
23
|
|
24
24
|
// 最適化版
|
25
|
-
/[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#
|
25
|
+
/[^a-zA-Z@#]*(?:(?!@[a-hA-H]|#[1-9])[@#][^a-zA-Z@#]*)*/
|
26
26
|
```
|
27
27
|
|
28
28
|
Re: sounisi5011さん
|
1
質問文の正規表現条件変更につき回答を追記
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さん
|