簡體   English   中英

Javascript regex可選字符,可在任意位置並以特定字符為邊界

[英]Javascript regex optional character at any position and bordered by specific characters

我需要查找和更改給定的字符串,無論它出現在文檔中的任何位置。 我有兩個條件可以分別處理,但不能一起工作。

  1. 有時用-\\n在行之間打斷單詞,並且應該始終將其匹配。
  2. 僅當該字符串以非字母數字或連字符的字符為邊界時,才應匹配該字符串。

假設我想用<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.

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