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

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

js正則表達式求兩個字符之間的字符串

js正則表達式求兩個字符之間的字符串

白豬掌柜的 2018-11-14 13:14:21
這種字符串var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; 我想得到【和】之間的字符串數組如何用一個正則搞定?不包括兩個括號目前我自己只能做到帶括號的var d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】"; var patt = /\【[^\】]+\】/g; d.match(patt)
查看完整描述

1 回答

?
FFIVE

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

非常簡單,用零寬斷言

const d = "1【ddd】sfdsaf【ccc】fdsaf【bbbb】";
d.match(/[^【]+(?=】)/g);

上面只用了零寬度正預測先行斷言,實際上如果 不限于JavaScript的話 是新版 Chrome、新版 Node.JS 的話,還可以寫成

(?<=【).+?(?=】)

零寬斷言分為兩類四種:

正向零寬斷言

零寬度正預測先行斷言(?=exp)

表示自身位置之后可以匹配到exp的表達式,而不匹配exp。
比如\d+(?=999)表示以999結尾的數字串(但是匹配結果不包含999)

零寬度正回顧后發斷言(?<=exp)(JavaScript不支持 新版 Chrome、新版 Node.JS 支持,Firefox 至今不支持,其他未測試)

表示自身位置之前可以匹配到exp的表達式,而不匹配exp。
比如(?<=999)\d+表示以999開頭的數字串(但是匹配結果不包含999)

負向零寬斷言

零寬度負預測先行斷言(?!exp)

表示自身位置之后不能是exp的表達式。
比如\d+(?!999)表示匹配不是以999結尾的數字串

零寬度負回顧后發斷言(?<!exp)(JavaScript不支持 新版 Chrome、新版 Node.JS 支持,Firefox 至今不支持,其他未測試)

表示自身位置之前不能是exp的表達式。
比如(?<!999)\d+表示匹配不是以999開頭的數字串

舉個例子

const str = '~~~%ABC%~~~DEF~~~%GHI~~~JKL%~~~';

console.log('左右都有 % 的三個連續字母(ABC):', str.match(/(?<=%)\w{3}(?=%)/g));

console.log('左右都沒有 % 的三個連續字母(DEF):', str.match(/(?<!%)\w{3}(?!%)/g));

console.log('僅左邊有 % 的三個連續字母(GHI):', str.match(/(?<=%)\w{3}(?!%)/g));

console.log('僅右邊有 % 的三個連續字母(JKL):', str.match(/(?<!%)\w{3}(?=%)/g));

在新版 Chrome 下可以得到結果:

左右都有 % 的三個連續字母(ABC): ["ABC"]

左右都沒有 % 的三個連續字母(DEF): ["DEF"]

僅左邊有 % 的三個連續字母(GHI): ["GHI"]

僅右邊有 % 的三個連續字母(JKL): ["JKL"]

在 Firefox 或是舊版 Chrome 下無法執行。

查看完整回答
反對 回復 2018-12-08
  • 1 回答
  • 0 關注
  • 1691 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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