有一個這樣的字串
var string =
`<!-- paragraph {"className":"123"} -->
<p>abc</p>
<!-- /paragraph -->
<!-- paragraph {"className":"456"} -->
<p>cde</p>
<!-- /paragraph -->
<!-- paragraph {"className":"789"} -->
<p>fgh</p>
<!-- /paragraph -->`
const regex = /"className":"(. )"/g;
string = string.replace(regex, "");
console.log(string);
我想洗掉除className.
換句話說,我想讓它看起來像123456789最后。
如果你能告訴我更好的方法,我會很感激你的建議。
除此以外的任何方法replace都可以。
uj5u.com熱心網友回復:
match然后使用replace你不想要的字串
var string =
`<!-- paragraph {"className":"123"} -->
<p>abc</p>
<!-- /paragraph -->
<!-- paragraph {"className":"456"} -->
<p>cde</p>
<!-- /paragraph -->
<!-- paragraph {"className":"789"} -->
<p>fgh</p>
<!-- /paragraph -->`
const regex = /"className":"(. )"/g;
let arr = string.match(regex, '');
arr = arr.map(e => e.replace(`"className":"`, '').slice(0, -1))
let str = arr.join('')
console.log(str);
uj5u.com熱心網友回復:
您嘗試的是替換,而您必須嘗試“找到”匹配項
下面給出了兩個例子我在下面給出的看起來就像你的問題,
你試過了string.replace(regex);,
但答案是string.replace(regex,function(match, g1, g2) {/*...*/});
var string =
`<!-- paragraph {"className":"123"} -->
<p>abc</p>
<!-- /paragraph -->
<!-- paragraph {"className":"456"} -->
<p>cde</p>
<!-- /paragraph -->
<!-- paragraph {"className":"789"} -->
<p>fgh</p>
<!-- /paragraph -->`
const regex = /"className":"(. )"/g;
var answer="";
var answerArray=[];
string.replace(regex, function(match, g1, g2) {
/*
use g1 variable for anything
like array or string,two examples are given below...
*/
answer =g1;
answerArray.push(g1);
});
console.log(answer);
console.log(answerArray);
參考這里
uj5u.com熱心網友回復:
. 是一個貪婪的模式,你只依賴于.不匹配換行符(沒有sflag)。這可能不夠穩健。
您的字串是 HTML 字串,因此使用 HTML 決議器是更合適的開始,使用DOMParser. 由于 HTML 注釋可以放在 HTML 中的任何位置,HTML 決議器會自動將這些內容放在不同的位置;將字串包裹在<body>...</body>中以確保所有內容都放置在一個一致的位置。您稍后可以通過 訪問內容。.body.childNodes
接下來,使用Array.from將節點串列轉換為適當的陣列,filter然后
- 通過
nodeType僅獲取 HTML 注釋節點(使用 上的靜態屬性Node),以及 - 通過
textContent僅獲取那些以開頭的評論,paragraph而不是那些以/paragraph(使用trimandstartsWith)開頭的評論。
map在生成的評論節點上獲取它們的文本內容。
現在有點不清楚格式是什么。它總是一個單詞(沒有空格),后跟一個空格,然后是{...}結構嗎?可以有多個{……}結構嗎?{在……}結構之后可以有什么東西嗎?您必須自己弄清楚這一點并改進任何正則運算式,但我將假設paragraph.../paragraph類似于 HTML 標記,這意味著第一個空格后面是{...}結構。但是,我不會假設這些{"className":"123"}結構總是沒有空間。
僅按第一個空格拆分,丟棄之前的文本,并保留其余部分,可以通過按所有空格拆分,從索引 1 中取出所有內容,并再次通過空格合并所有內容來實作:..split(" ").slice(1).join(" ")
中間結果是:
[
"{\"className\":\"123\"}",
"{\"className\":\"456\"}",
"{\"className\":\"789\"}"
]
這些是 JSON 字串。使用JSON.parse(在現有的map)決議所有內容并訪問className屬性。
現在你有這個中間結果:
[
"123",
"456",
"789"
]
將其全部連接.join("")到所需的"123456789"字串中。
完整代碼
const string =
`<!-- paragraph {"className":"123"} -->
<p>abc</p>
<!-- /paragraph -->
<!-- paragraph {"className":"456"} -->
<p>cde</p>
<!-- /paragraph -->
<!-- paragraph {"className":"789"} -->
<p>fgh</p>
<!-- /paragraph -->`,
result = Array.from(new DOMParser().parseFromString(`<body>${string}</body>`, "text/html")
.body
.childNodes)
.filter(({ nodeType, textContent }) => nodeType === Node.COMMENT_NODE && textContent.trim().startsWith("paragraph"))
.map(({ textContent }) => JSON.parse(textContent.trim()
.split(" ")
.slice(1)
.join(" "))
.className)
.join("");
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457428.html
標籤:javascript
