2017-07-26 17 views
0

文書内で発生した文字列があれば、それを探して変更する必要があります。私は別に扱うことができるが、一緒に働くことができない2つの条件があります。Javascript regex任意の位置の任意の文字で、特定の文字で囲まれています

  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)に切り替えようとしましたが、何も一致しませんでした。どんな助けも大歓迎です。

+1

意味しますか\\ b "、 'ig')、 ' $&')'? – revo

+0

それはトリックを行うように見えます!私はそれを答えとして投稿してください。私はそれを受け入れます。 – rurp

答えて

1

ほとんどの場合、単語境界\bが必要です。また、この2行のスニペットにコードを短縮することができます:あなたはこの `のvar newDoc = doc.replace(正規表現( "\\ B" +マスク+」のようなSTH

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>'))

関連する問題