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

回答編集履歴

1

先読み

2019/10/07 23:50

投稿

think49
think49

スコア18196

answer CHANGED
@@ -1,13 +1,27 @@
1
1
  出来ない方向でまとまっているようですが、技術的には可能です。
2
- (以下、モバイル端末で未検証コードを書いているので、叩き台にして下さい)
3
2
 
3
+ ### 消費する
4
+
5
+ 以下、モバイル端末で未検証コードを書いているので、叩き台にして下さい。
6
+
4
7
  ```JavaScript
5
8
  string.replace(/(<a\s[^>]*>[^<]*(?:<(?!/a>)[^>]*>[^<]*)*</a)(?=>)|(>[^<]*)(?=<|$)/g, (match,anchor,text) => anchor ? anchor : text.replace(/hoge/g, 'fuga'));
6
9
  ```
7
10
 
8
11
  ご覧の通り、正規表現が複雑化するので、正規表現に不慣れであれば、お勧めはしません。
9
12
 
13
+ ### 先読み
14
+
15
+ 「終了タグが省略されないこと」が保証されているなら、
16
+ (上に同じく未検証)
17
+
18
+ ```JavaScript
19
+ string.replace(/>([^<]*)(?=(?:<(?!(?:/a>|a[\s>])[^>]*>[^<]*)*(?:<a[\s>]|$))/g, (match,text) => '>' + text.replace(/hoge/g, 'fuga'));
20
+ ```
21
+
22
+ ### XPath
23
+
10
- XPathでテキストノードを得て、置換するのも良いと思います。
24
+ 既存DOMからテキストノード値を書き換えるなら、私はXPathでテキストノードを得て、置換させます。
11
25
  https://teratail.com/questions/31198
12
26
 
13
27
  Re: pipo さん