這看起來有點毛茸茸,所以我希望有人可以給它一次。帶分號和空格的JavaScript正則表達式
意圖是將字符串拆分爲一個子字符串數組,前後要拆分的字符作爲子字符串組件的一部分被保留(即沒有丟失,因爲它將在典型的拆分中丟失)。分割應該在'endsWith'中定義的字符之後,並且在'startsWith'中定義的字符之前。
最初我用'endsWith'功能編寫了它,它運行良好(如後文所述),但是當我添加'startsWith'功能時,事情開始變得有點拗口。
var input = "foo bar;baz#qux>quux,rawr";
var startsWith = ['#', ','];
var endsWith = [';', '\\s', '>'];
var re = new RegExp("(?=[" + startsWith.join('') + "])(.*?[" + endsWith.join('') + "]+)", "g");
console.log(re); //=> /(?=[#,])(.*?[;\s>]+)/g
var result = input.split(re).filter(Boolean);
console.log(result);
結果:[ '富巴;巴茲', '#qux>', 'QUUX,RAWR']
預期:[ '富', '巴;', '巴茲',' #qux>','quux',',rawr']
問題是它沒有在空白符或分號後分裂,好奇地是它在大於符號後分裂。
(添加第二個字符來startsWith很顯然,它不是分裂的共同之後 - 在正則表達式的「#」,也不管秩序「」)
另一個有趣的事情是,除該 'startsWith' 的東西,只是使其:
var re = new RegExp("(.*?[" + endsWith.join('') + "]+)", "g");
console.log(re); //=> /(.*?[;\s>]+)/g
的分號和空格現在的工作:[ '富', '巴;', '巴茲#qux>', 'QUUX,RAWR']
但我也想startsWith功能('#qux'和',rawr'分開),我不知道第二,爲什麼我看到這個問題時,多數民衆贊成重新添加在
你能試着用簡單的英語來解釋你的需要嗎?根據我的理解,你想要提取以任何'startsWith'數組開頭並以任何'endsWith'數組結尾的字符串,對吧? – sp00m
如果「startsWith」沒有產生預期結果,有什麼好處?你要求正則表達式從'#'開始匹配,這正是使用'(?=#)'時正則表達式引擎正在做的事情。如果不需要,請將其移除。如果需要,預計第一批結果。 –
我已經添加了我的意圖sp00m英文解釋,謝謝:) – braks