[解決済み] asdf".replace(/.*/g, "x") == "xx "であるのはなぜですか?
2022-04-27 15:31:47
質問
意外な事実に遭遇しました。
console.log("asdf".replace(/.*/g, "x"));
なぜ に の置換を行うことができます。 空でない文字列で改行がないものは、このパターンに対してちょうど2つの置換を生成するようです。 置換関数を使って、最初の置換は文字列全体、2番目の置換は空の文字列であることがわかります。
どのように解決するのですか?
の通りです。 ECMA-262 規格に準拠しています。 String.prototype.replace コール RegExp.prototype[@@replace] を指定します。 と言っている。
11. Repeat, while done is false
a. Let result be ? RegExpExec(rx, S).
b. If result is null, set done to true.
c. Else result is not null,
i. Append result to the end of results.
ii. If global is false, set done to true.
iii. Else,
1. Let matchStr be ? ToString(? Get(result, "0")).
2. If matchStr is the empty String, then
a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")).
b. Let nextIndex be AdvanceStringIndex(S, thisIndex, fullUnicode).
c. Perform ? Set(rx, "lastIndex", nextIndex, true).
ここで
rx
は
/.*/g
と
S
は
'asdf'
.
11.c.iii.2.b を参照のこと。
b. nextIndexをAdvanceStringIndex(S, thisIndex, fullUnicode)とする。
したがって
'asdf'.replace(/.*/g, 'x')
というのは、実は
-
result (未定義), results =
[]
, lastIndex =0
-
結果 =
'asdf'
結果[ 'asdf' ]
最終インデックス4
-
結果 =
''
結果[ 'asdf', '' ]
最終インデックス4
,AdvanceStringIndex
に設定し、lastIndex を5
-
結果 =
null
結果[ 'asdf', '' ]
を返します。
したがって、2つのマッチがあります。
関連
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
[解決済み】ReactJSでエラー発生 Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] 貪欲 vs. 渋い vs. 所有格の修飾語
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】Regexで一部のグループのみを置換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
JSアレイループと効率解析の比較
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
jsを使った簡単な照明スイッチのコード
-
vueディレクティブv-bindの使用と注意点
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
JSクリックイベント - Uncaught TypeError: プロパティ 'onclick' に null を設定できません。