簡體   English   中英

用String.replace()替換正則表達式

[英]replace " using String.replace() with regex

我有以下字符串

"content \" content <tag attr1=\"val1\" attr2=\"val2\">content \" content</tag> content \" content"

我想替換所有"內部標簽定義字符'與使用的字符String.replace()函數。 "標簽內容中的字符必須保持其目前的形式。

"content \" content <tag attr1='val1' attr2='val2'>content \" content</tag> content \" content"

也許正則表達式可以與某些分組一起使用?

您可以使用replace()和正則表達式回調為您執行此操作:

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';

function replaceCallback(match) {
    return match.replace(/"/g, "'");
}

str = str.replace(/<([^>]*)>/g, replaceCallback);

正則表達式將匹配字符串中<>字符之間的任何內容,並將匹配項傳遞給replaceCallback()方法,該方法將根據需要將"替換為'字符。

編輯: replaceCallback()使用的是.replace('"', "'") ,但這只會替換第一個" 我已經對其進行了更新以使用正則表達式替換,並且現在可以按需運行了。

以下代碼(從該問題的公認答案中獲取)也可以使用,無需回調,但使用不易理解的正則表達式。

var str = 'content " content <tag attr1="val1" attr2="val2">content " content</tag> content " content';
str = str.replace(/"(?=[^<]*>)/g, "'");
var str = "content \" content <tag attr1=\"val1\" attr2=\"val2\">content \" content</tag> content \" content";

var replaced = str.replace(/\<.*?\>/g, function(match, index){ 
  return match.replace(/"/g, "'"); // `match` will be each tag , both opening and closing. 
});

您不能只使用一個正則表達式,而必須使用一種組合。 這是要走的路:

  1. 匹配標簽中的文本,這很容易。
  2. 將您以前的比賽輸出中的字符替換為您要使用replace的字符,這很容易,因為您已經完成了先前的比賽。

向你致敬! 不管你是誰。

暫無
暫無

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

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