亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這個javascript regex不能工作?

為什么這個javascript regex不能工作?

為什么這個javascript regex不能工作?我正在做一個小的javascript方法,它接收一個點的列表,我必須讀取這些點來在Google地圖中創建一個多邊形。我收到表格上的以下要點:(lat,long),(lat,long)因此,我做了以下正則表達式:\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)我用雷吉帕爾我收到的確切數據是:(25.774252, -80.190262),(18.466465, -66.118292),(32.321384, -64.75737),(25.774252, -80.190262)它是有效的,那么為什么當我在javascript中有這段代碼時,我會在結果中得到NULL呢?var polygons="(25.774252, -80.190262),(18.466465, -66.118292),(32.321384, -64.75737),(25.774252, -80.190262)"; var reg = new RegExp("/\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g");var result = polygons.match(reg);我在執行時沒有javascript錯誤(使用GoogleChrome的調試模式)。此代碼托管在javascript函數中,該函數位于包含的JS文件中。在onload方法中調用此方法。我找了很多次了,但我找不到為什么這不管用。非常感謝!
查看完整描述

2 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

regex文字[MDN]:

var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;

當您使用RegExp [MDN]:

  • “定界符”

    /

    不應該是表達式的一部分。
  • 如果將表達式定義為字符串,則必須轉義反斜杠,因為它是字符串中的轉義字符。

此外,修飾符作為函數的第二個參數傳遞。

所以如果你想用RegExp(在本例中,您不必這樣做),相應的內容是:

var reg = new RegExp("\\(\\s*([0-9.-]+)\\s*,\\s([0-9.-]+)\\s*\\)", "g");

(我想你現在明白為什么regex文字更方便了)


我總是覺得復制和過去RegExp表達式,并查看其輸出。以你原來的表情,我們得到:

/(s*([0-9.-]+)s*,s([0-9.-]+)s*)/g

這意味著表達式試圖匹配/sg字面上和父母()仍被視為特殊人物。


最新情況: .match()返回一個數組:

["(25.774252, -80.190262)", "(18.466465, -66.118292)", ... ]

這似乎不太有用。

你必須用.exec() [MDN]提取數字:

["(25.774252, -80.190262)", "25.774252", "-80.190262"]

這必須反復調用,直到處理完整個字符串為止。

例子:

var reg = /\(\s*([0-9.-]+)\s*,\s([0-9.-]+)\s*\)/g;var result, points = [];while((result = reg.exec(polygons)) !== null) {
    points.push([+result[1], +result[2]]);}

這將創建一個數組和一元加號(+)將字符串轉換為數字:

[
    [25.774252, -80.190262], 
    [18.466465, -66.118292], 
    ...]

當然,如果您希望將值作為字符串而不是數字,則只需省略+.


查看完整回答
反對 回復 2019-06-25
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

雖然這是一個很老的答案,但它確實幫助我完成了我的表單驗證。額外的“\”在“\”?!霸诮Y束時這樣做:) 

查看完整回答
反對 回復 2019-06-25
  • 2 回答
  • 0 關注
  • 539 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號