2

で始まる特定の単語を置き換える問題があり#ます。次のコードがあります

var x="#google",
eval("var pattern = /" + '\\b' + x + '\\b');
txt.replace(pattern,"MyNewWord");

次のコードを使用すると、正常に動作します

var x="google",
eval("var pattern = /" + '\\b' + x + '\\b');
txt.replace(pattern,"MyNewWord");

それは正常に動作します

コードの最初の部分を機能させる方法についての提案

ps。ユーザー入力になるので使用しevalます。x

4

4 に答える 4

1

問題は\b、「単語」文字 (文字、数字、またはアンダースコア) と「非単語」文字 (その他) の間の境界を表すことです。#は単語以外の文字であるため、 「単語文字前にある a」を\b#意味します。これは、あなたが望むものではありません。どちらかといえば、もっと似たものが欲しい; は境界であるため、 「単語文字が前にないa 」を意味します。#\B#\B\B##

何かを「単語」文字または「非単語」文字にするプログラミング言語の概念ではなく、単語を空白で区切る必要があると思います。そのために、次のように書くことができます。

var x = '#google';    // or 'google'
var pattern = new RegExp('(^|\\s)' + x);
var result = txt.replace(pattern, '$1' + 'MyNewWord');

追加するために編集:正規表現ではなく、実際にリテラル文字列であることが想定されている場合xは、その中のすべての特殊文字をバックスラッシュで「引用」する必要があります。これを書くことでそれを行うことができます:

var x = '#google';  // or 'google' or '$google' or whatever
var quotedX = x.replace(/[^\w\s]/g, '\\$&');
var pattern = new RegExp('(^|\\s)' + quotedX);
var result = txt.replace(pattern, '$1' + 'MyNewWord');
于 2012-10-13T02:21:54.727 に答える
1

次のようにパタパタさせます。

/(#)?\w*/
于 2012-10-13T02:18:27.570 に答える
1

正規表現を作成したい場合は、eval の代わりにこれを試してください:

var pattern = new RegExp(x);

ところで、行:

eval("var pattern = /" + '\\b' + x + '\\b');

囲みパターンがないため、エラーが発生します。次のようにする必要があります。

eval("var pattern = /" + '\\b' + x + '\\b/');
于 2012-10-13T02:20:42.750 に答える
0

どうですか

var x = "#google";

x.match(/^\#/);

于 2012-10-13T02:18:54.207 に答える