[英]Split Regex digit
我想分割一條街道地址:巴黎75005 Poliveau街21號
我的輸出需要像:
[21]
[rue Poliveau]
[,]
[75005]
[Paris]
這是用於HTML腳本(網站Angular)
var regex = /\s?([(\d+),(\b)])\s?/;
var resultat = query.split(regex);
for(var i=0; i<resultat.length;i++)
{console.log(resultat[i]);
盡管\\ d +我的輸出是:
[2]
[1]
[rue Poliveau]
[,]
[7]
[5]
[0]
[0]
[5]
[Paris]
謝謝
使用匹配比使用以下正則表達式拆分更容易,
[a-zA-Z]+(?: *[a-zA-Z]+)*|\d+|[^\w\s]
以上正則表達式的說明:
[a-zA-Z]+(?: *[a-zA-Z]+)*
-匹配空格分隔的字母 |
-交替 \\d+
-匹配一個或多個數字 |
-交替 [^\\w\\s]
-匹配一個或多個非單詞非空格字符 試試這些JS代碼,
var s = '21 rue Poliveau, 75005 Paris' console.log(s.match(/[-'a-zA-ZÀ-ÿ]+(?: *[-'a-zA-ZÀ-ÿ]+)*|\\d+|[^\\w\\s]/g)) s = "25 chemin de l'école, Saint-Rémy-de-Provence" console.log(s.match(/[-'a-zA-ZÀ-ÿ]+(?: *[-'a-zA-ZÀ-ÿ]+)*|\\d+|[^\\w\\s]/g))
編輯:
為了支持重音符號,我正在對正則表達式進行增強,其中À-ÿ
范圍應涵蓋當前所需的字符。 還包括-
和'
因此它們也被單詞捕獲。 行為可以根據需要進行更改/增強。 請讓我知道。 使用的增強型正則表達式將是這個,
[-'a-zA-ZÀ-ÿ]+(?: *[-'a-zA-ZÀ-ÿ]+)*|\d+|[^\w\s]
讓我知道進一步的查詢。 可能會稍等一下,就像回家一樣。
如果要使用split,則可以使用Lookbehind Assertions,大多數瀏覽器現在似乎都支持它們,但是請檢查是否要允許較舊的瀏覽器也可以使用。
編輯:好的,我應該說大多數瀏覽器看起來都將支持它。 快速測試,看來Chrome是唯一的一個atm,因此我認為Node.js也可以。 因此,此解決方案將來可能會更有用。 因此,我將其保留在此處,並在兼容性方面發出警告。
基本上是3個拆分,兩個負向后查找,以及1個正向提前。
(?<=\\d)
(注意末尾的空格)..找到數字但不捕獲,然后在空格上分割
(?<=\\w,)
(請再次注意空格)..找到任何單詞char和逗號,不要捕獲和空格。
(?=,)
以逗號分隔並且不捕獲以保留在輸出中。
const str1 = "21 rue Poliveau, 75005 Paris"; const str2 = "25 chemin de l'école, Sainte-Mère-Églis"; const re_split = /(?<=\\d) |(?<=\\w,) |(?=,)/; console.log(str1.split(re_split)); console.log(str2.split(re_split));
在您的模式中,您正在使用捕獲組來匹配此字符類[(\\d+),(\\b)]
中的所有單個字符
拆分時也會返回捕獲組中的字符,這就是為什么您在結果中獲得很多項的原因。
如果要對示例數據使用split ,則字符串中有幾個地方可以匹配以進行拆分:
要獲得這些字符和位置,您可以使用交替
\s(?=[a-z]|\d|[A-Z][a-z]+$)|(?=,)
\\s
匹配空白字符 (?=
正向前進,斷言右邊直接是
[az]|\\d|[AZ][az]+$
匹配az或數字或大寫字母,后跟1+小寫az並聲明字符串的結尾 )
正面正向 |
要么 (?=,)
正向前進,斷言右邊直接是一個逗號 let query = "21 rue Poliveau, 75005 Paris"; var regex = /\\s(?=[az]|\\d|[AZ][az]+$)|(?=,)/g; var resultat = query.split(regex); console.log(resultat);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.