Saya sedang mengusahakan projek yang memerlukan saya mengekstrak nama dan lokasi pakej Python yang dipasang menggunakan arahan pip install
.
Halaman web mengandungi elemen code
yang mengandungi berbilang baris teks dan arahan bash. Saya ingin menulis kod JS yang boleh menghuraikan teks ini dan mencari pakej dan lokasinya dalam teks.
Sebagai contoh, jika teks ialah:
$ pip install numpy pip install --global-option build_ext -t ../ pandas>=1.0.0,<2 sudo apt update pip uninstall numpy pip install "requests==12.2.2"
Nak dapat result macam ni:
[ { "name": "numpy", "position": 14 }, { "name": "pandas", "position": 65 }, { "name": "requests", "position": 131 } ]
Bagaimana saya boleh melaksanakan fungsi ini dalam JavaScript?
Anda boleh lihat kod yang saya jelaskan dalam jawapan ini.
Berikut ialah satu lagi penyelesaian yang serupa, lebih berdasarkan ungkapan biasa:
Berikut ialah penyelesaian alternatif, cuba gunakan gelung dan bukannya ungkapan biasa:
Ideanya adalah untuk mencari baris yang mengandungi
pip install
teks, ini adalah baris yang kami minati. Kemudian, pecahkan perintah itu kepada perkataan dan gelung di atasnya sehingga anda mencapai bahagian pakej arahan itu.Pertama, kami akan menentukan ungkapan biasa untuk pakej. Ingat, pakej boleh jadi seperti
pip install 'stevedore>=1.3.0,<1.4.0' "MySQL_python==1.2.2"
:Perhatikan pengelompokan bernama ,
package_part
用于识别“带版本的包”字符串,而package_name
digunakan untuk mengekstrak nama pakej.Mengenai parameter
Kami mempunyai dua jenis argumen baris arahan: pilihan dan bendera.
Masalah denganpilihan ialah kita perlu memahami bahawa perkataan seterusnya bukanlah nama pakej, tetapi nilai pilihan.
Jadi, saya mula-mula menyenaraikan semua pilihan dalam arahan
pip install
:Saya kemudian menulis fungsi yang akan saya gunakan kemudian untuk memutuskan perkara yang perlu dilakukan apabila ia melihat hujah:
Fungsi ini menerima parameter yang diiktiraf dan selebihnya perintah, dibahagikan kepada perkataan.
(Di sini anda mula melihat "kaunter indeks". Oleh kerana kita juga perlu mencari kedudukan setiap penemuan, kita perlu menjejaki kedudukan semasa dalam teks asal).
Dalam beberapa baris terakhir fungsi, anda dapat melihat bahawa saya mengendalikan
--option=something
和--option something
kedua-dua kes.Parser
Penghurai utama kini membahagikan teks mentah kepada baris dan kemudian kepada perkataan.
Setiap operasi mesti mengemas kini indeks global untuk menjejaki kedudukan kita dalam teks, dan indeks ini membantu kita mencari dan mencari dalam teks tanpa terperangkap dalam subrentetan yang salah, menggunakan
indexOf(str, counterIndex)
: