我正在使用 JavaScript 中的正則運算式計算不同單詞在文本中出現的次數。我的問題是當我參考單詞時:'word'應該簡單地算作word(不帶引號,否則它們會表現為兩個不同的單詞),而it's應該算作一個完整的單詞。
(?<=\w)(')(?=\w)
這個正則運算式可以識別內部的撇號,但不能識別單詞周圍的撇號。問題是,我不能在諸如[\w] .
(?<=\w)(')(?=\w)|[\w]
將計it's a 'miracle' of nature為 7 個單詞,而不是 5 個(it, ',s變成 3 個不同的單詞)。此外,第三個單詞應簡單地選擇為miracle,而不是選擇為'miracle'。
為了讓事情變得更加復雜,我需要捕捉變音符號太多,所以我使用[A-Za-zà-??-??-?]的替代\w。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
1)您可以簡單地使用/[^\s] /g正則運算式

const str = `it's a 'miracle' of nature`;
const result = str.match(/[^\s] /g);
console.log(result.length);
console.log(result);
2)如果您正在計算字串中的總字數,那么您還可以使用split:
const str = `it's a 'miracle' of nature`;
const result = str.split(/\s /);
console.log(result.length);
console.log(result);
3)如果你想要一個沒有quote開頭和結尾的單詞,那么你可以這樣做:
const str = `it's a 'miracle' of nature`;
const result = str.match(/[^\s] /g).map((s) => {
s = s[0] === "'" ? s.slice(1) : s;
s = s[s.length - 1] === "'" ? s.slice(0, -1) : s;
return s;
});
console.log(result.length);
console.log(result);
uj5u.com熱心網友回復:
您可以交替使用 2 個捕獲組,然后檢查這些組的值。
(?<!\S)'(\S )'(?!\S)|(\S )
(?<!\S)'負向后視,在左側斷言空白邊界并匹配'(\S )捕獲組 1,匹配 1 個非空白字符'(?!\S)匹配'并斷言右側的空白邊界|或者(\S )捕獲組 2,匹配 1 個非空白字符
請參閱正則運算式演示。
const regex = /(?<!\S)'(\S )'(?!\S)|(\S )/g;
const s = "it's a 'miracle' of nature";
Array.from(s.matchAll(regex), m => {
if (m[1]) console.log(m[1])
if (m[2]) console.log(m[2])
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/370417.html
標籤:javascript 正则表达式 变音符号 撇号 单引号
上一篇:我可以在Javascript中的forEach中使用另一個回圈嗎?還是我最好用來分隔回圈?
下一篇:PermissionError:[Errno13]權限被拒絕:盡管在Dockerfile中授予權限-可能是什么問題?
