簡體   English   中英

分割正則表達式數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM