ホームページ >ウェブフロントエンド >jsチュートリアル >JS の Replace() メソッドで発生した問題
この記事では主に、JS で Replace() メソッドを使用するときに発生する問題の概要を紹介します。必要な方は参考にしていただければ幸いです。
今日はPCクライアントの自動パッケージ化スクリプトを書いているときにいくつか問題が発生しましたが、軽微な問題ではありましたが、しばらく止まっていたので記録しておくことにしました。
js の replace() メソッドは、2 つのパラメーターを受け取ることができます。最初のパラメーターは、置換される正規表現オブジェクトまたは文字列です。2 番目のパラメーターは、置換されるコンテンツです。関数の場合、置換される内容は文字列である必要があります。実行中に発生したエラーは次のとおりでした。未定義のプロパティ「replace」を読み取れません。具体的なコードは次のとおりです。
var fs=require("fs") var infoPlistFile = osxFolder + '/Contents/Info.plist'; var infoPlist = fs.readFile(infoPlistFile); fs.writeFile(infoPlistFile, infoPlist.replace(/Pexip Infinity Connect/gm, $scope.manifest.name));
このコードを実行すると、未定義の属性置換を取得できないというエラーが報告されました。最初はどこに問題があるのかわかりませんでした。その後、置換されたファイルを出力しようとしました。 infoPlist を調べたところ、それが null であることがわかり、infoPlist の定義に問題があることがわかりました。fs.readFileSync に変更した後、そのようなエラーはないことがわかりましたが、新しいエラーが発生しました: replace は関数ではありません
関連する情報を検索したところ、対応する変数が文字列ではなく他の型であることがわかったので、infoPlistの型を出力しましたが、出力されたのはオブジェクトだったので、問題はここにあります。は間違っていて、エラーが報告されたので、それを文字列に加工する操作を追加しました
var infoPlistFile = osxFolder + '/Contents/Info.plist'; var infoPlist = readFile(infoPlistFile).toString(); writeFile(infoPlistFile, infoPlist.replace(/Pexip Infinity Connect/gm, $scope.manifest.name));
また、テスト用のデモを書いたときに、受け取る変数がない場合、 replace() メソッドは次のように機能しません:
var str="Hello World"; str.replace(/World/g, "dxy"); console.log(str);
この時点で出力される str はまだ「Hello World」です。ここでは、元の変数を置き換えるために変数をレシーバーとして使用する必要があります。例:
var str="Hello World"; var a=str.replace(/World/g, "dxy"); console.log(a);
このときの印刷結果は「Hello dxy」です。
まとめ: 今回 replace() メソッドを使用するときに、次の問題に気づきました:
1. replace() メソッドを使用するときは、まず、null または未定義の型の変数に対して呼び出すことができないことを確認してください。それに判定を追加し、変数に値がある場合にのみメソッドを呼び出すことができます。
2. replace() メソッドを実行する場合、変数は値を持つだけでなく、文字列型である必要があります。
3. JS は自動的に値を割り当てません。メソッドを実行するには、メソッド内で直接実行するか、結果が返されるときに変数を介して受け取る必要があります。
4. 最初のパラメータが正規表現の場合、引用符は追加できません。
関連する推奨事項:
JavaScript での replace() メソッドの使用例
ECSHOP では非推奨: preg_replace() エラーの解決策
PHP での str_replace() 関数の使用の概要弦交換
以上がJS の Replace() メソッドで発生した問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。