2017-02-14 37 views
-3

我試圖建立一個查找所有"在一個CSV文件(;分隔)未文字分隔符正則表達式這樣的規格是:正則表達式:只有找到「那不是分隔符

  1. "不處於行
  2. "不是由;
  3. " preceeded的開始後面沒有;
  4. "不在行尾

我使用node.js所以沒有後面的可能。

下面是一個例子將測試用:提前

123123;"This is a text. These "quotes" should be matched, this one not";"text";4125;"Also no match"

謝謝!

+1

爲什麼downvotes? – boernard

回答

1

我會做簡單:

var s = '123123;"This is a text. These "quotes" should be matched, this one not";"text";4125;"Also no match"'; 
 
res = s.replace(/([^;])"([^;])/g, '$1$2'); 
 
console.log(res);

+0

非常感謝!只有缺少的東西是第四個標準,所以我添加了一個'\ n': '([^; \ n])「([^; \ n])' – boernard

+0

@boernard:您需要添加'\ n'只有在最後一個引號之後有一個字符,比如'blah blah「abc' – Toto

+0

我在這裏測試了這個https://regex101.com/r/jtDowM/1,並且在第二行中最後一個引號匹配了 – boernard

0

您可以使用下面的正則表達式:

(?<!^|;)"(?!;|$) 
  • 它採用了先行和回顧後,這意味着,它不會在JavaScript工作
  • (?<!^|;)前面的令牌不能^(啓動的字符串);
  • (?!;|$)後續令牌不能爲$(字符串的結尾)和;
  • 使用全局/g和多標誌/m,使其工作

這是一個活生生的例子:https://regex101.com/r/bqdQCB/2


如果不希望使用多行標誌/m,你可以使用以下正則表達式(也使用換行符):

(?<!^|;|\r\n|\n)"(?!;|$|\r\n|\n) 
  • \r\n是Windows斷線之後,\n是UNIX換行

這是一個活生生的例子:https://regex101.com/r/bqdQCB/3