[英]Javascript regex optional character at any position and bordered by specific characters
我需要查找和更改給定的字符串,無論它出現在文檔中的任何位置。 我有兩個條件可以分別處理,但不能一起工作。
-\\n
在行之間打斷單詞,並且應該始終將其匹配。 假設我想用<stuff>
標簽包裝匹配的文本。 對於第一個,我有以下感覺丑陋但有效的方法。 我在每個單詞的每個字符之間插入一個可選的-\\n
組。
function createMask(term){
var words = term.split(' ');
new_words = [];
for(i=0; i<words.length; i++){
var word = words[i].split('').join('(\\-\\n)?');
new_words.push(word);
}
var mask = new_words.join('\\s'); \\Any space is ok here.
return mask;
}
var doc = 'This is sand, and rand,\nand something else a-\nn-\nd ';
var mask = createMask('and');
var newDoc = doc.replace(RegExp(mask, 'ig'), '<stuff>$&</stuff>');
這匹配最后一個“ and”,也匹配“ sand”和“ rand”中的那些。
對於第二個我可以執行以下操作
function createMask(term){
var mask = '([^a-zA-Z0-9-])(' + term + ')([^a-zA-Z0-9-])';
return mask;
}
var doc = 'This is sand, and rand,\nand something else a-\nn-\nd ';
var mask = createMask('and');
var newDoc = doc.replace(RegExp(mask, 'ig'), '$1<stuff>$2</stuff>$3');
將表達式組合在一起是有效的,但捕獲組是錯誤的。 我嘗試切換(\\\\-\\\\n)?
到(?:\\\\-\\\\n)
,但沒有匹配任何內容。 任何幫助深表感謝。
您大多想要一個單詞邊界\\b
。 您還可以將代碼縮短為以下兩行代碼段:
var text = 'This is sand, and dand rand,\\nand something else a-\\nn-\\nd dand'; var words = 'and dand' console.log(text.replace(RegExp('\\\\b' + words.replace(/\\B|(\\S)\\b/g, '$1(?:-\\\\n)?').replace(/\\s/g, '\\\\s') + '\\\\b', 'ig'), '<stuff>$&</stuff>'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.