Tôi đang cố gắng để có được một lookahead tùy chọn nhưng đang gặp vấn đề mà ngay sau khi tôi làm cho nó tùy chọn (thêm một ?
sau khi nó), nó không còn phù hợp ngay cả khi dữ liệu có.tùy chọn regex lookahead
Tóm tắt ngắn gọn, tôi đang cố gắng kéo các tham số chuỗi truy vấn cụ thể ra khỏi URI. Ví dụ:
/.*foo.html\??(?=.*foo=([^\&]+))(?=.*bar=([^\&]+))/
.exec('foo.html?foo=true&bar=baz')
tôi sẽ phá vỡ ra một chút:
.*foo.html\?? // filename == `foo.html` + '?'
(?=.*foo=([^\&]+)) // find "foo=...." parameter, store the value
(?=.*bar=([^\&]+)) // find "bar=...." parameter, store the value
Ví dụ trên hoạt động hoàn hảo trong điều kiện rằng cả hai foo
và bar
tồn tại như tham số trong chuỗi truy vấn. Vấn đề là tôi đang cố gắng để thực hiện các tùy chọn, vì vậy tôi đã thay đổi nó để:
/.*foo.html\??(?=.*foo=([^\&]+))?(?=.*bar=([^\&]+))?/
↑ ↑
Added these question marks ─┴──────────────────┘
và nó không còn phù hợp với bất kỳ thông số, mặc dù nó vẫn còn phù hợp với foo.html
. Bất kỳ ý tưởng?
Tại sao bạn sử dụng cụm từ thông dụng cho điều này? Đơn giản chỉ cần tách chuỗi và lưu trữ các cặp khóa/giá trị trong một đối tượng. – ThiefMaster
@ThiefMaster - Bởi vì tôi muốn :) Và tôi muốn thậm chí nhiều hơn bây giờ nó sẽ không hoạt động. Trong thực tế, nó đơn giản chỉ vì mã ngắn hơn nhiều khi tôi chỉ cần lấy 2 thông số. –
Tại sao bạn cần lookahead? Để khớp với foo.html? Bar = baz & foo = true? – Bergi