簡體   English   中英

PCRE 實施負前瞻和背后合作?

[英]PCRE implementing negative lookahead AND behind working together?

大家好,

我遇到了一個我顯然無法解決的問題。 它涉及 PCRE 實施負前瞻和落后條件,這些條件應該(但顯然不)一起工作。

我想要完成的事情:

我有一個字符串,其中包含一個符合 JavaScript 語法的常量。 需要轉換此字符串的語法以符合 JSON 標准。

我遇到的問題:

當我嘗試用引號封裝對象屬性鍵時,我需要將“真實”屬性鍵與數組中包含的字符串區分開來,這些字符串恰好看起來像屬性鍵。

示例輸入(所有 JS):

const Const = {
  propertyKeyA: "someValue",
  propertyKeyB: ["ThisIsMyHeadache:ItShouldNotBeChanged"]
};

期望的輸出:

{
  "propertyKeyA": "someValue",
  "propertyKeyB": ["ThisIsMyHeadache:ItShouldNotBeChanged"]
}

我的 PCRE 方法:

$output = preg_replace(
  '~(?:^|\b)    (?![\'"])  (\w+)  (?<![\'"])     :~mx',
  '"\1":',
  $input
);

這導致:

{
  "propertyKeyA": "someValue",
  "propertyKeyB": [""ThisIsMyHeadache":ItShouldNotBeChanged"]
}

注意數組定義中的雙引號。 在我看來,這些條件似乎根本不起作用。

有沒有人知道如何解決這個問題? 這將是非常感謝!

最好的,克里斯

您混合了前瞻和后視位置。

(?![\\'"])(\\w+)等於(\\w+)因為(?![\\'"])是一個負面的前瞻並且要求下一個字符不是'" ,但是因為下一個模式是\\w ,匹配一個單詞字符,前瞻變得多余。你需要在這里使用負后視, (?<![\\'"]) (\\w+) (\\w+)(?<![\\'"])是類似的:字符字符不能是'"並且負向后視是多余的。 你想在這里向前看

你需要使用

'~(?:^|\b) (?<![\'"]) (\w+) (?![\'"]) :~mx'

請參閱正則表達式演示

正如Wiktor在對我最初問題的評論中所發布的,這是解決方案:

'~(?:^|\b) (?<![\'"]) (\w+) (?![\'"]) :~mx'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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