回答:
単一の正規表現では、文字列置換関数を使用する必要があります。特殊文字と仮定すると、文字ではないものを意味します。解決策は次のとおりです。
const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));
str.replace(/[^a-zA-Z0-9]/g, "")
str.replace(/[^a-zA-Z0-9 ]/g, "");
通知が必要です。0〜9と]の間にスペースがあります
削除する文字を指定して実行できます。
string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');
または、数字と文字以外のすべての文字を変更するには、次を試してください:
string = string.replace(/[^a-zA-Z0-9]/g, '');
/[^a-zA-Z0-9]/g
()
やwhitespaces
文字列で.text().replace(/[ ()]/g, '')
最初のソリューションは、UTF-8アルファベットでは機能しません。(これはПривітなどのテキストをカットします)。RegExpを使用せず、JavaScriptエンジンで適切なUTF-8サポートを使用する関数を作成できました。記号が大文字と小文字で等しい場合、それは特殊文字です。唯一の例外は空白です。
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
if(lower[i] != upper[i] || lower[i].trim() === '')
res += str[i];
}
return res;
}
更新:このソリューションは、大文字が小文字である言語でのみ機能することに注意してください。中国語などの言語では、これは機能しません。
更新2:あいまい検索で作業していたときに元のソリューションにたどり着きました。検索機能を実装するために特殊文字も削除しようとする場合は、より良い方法があります。ラテン文字のみから文字列を生成する文字変換ライブラリを使用すると、単純なRegexpが特殊文字を削除する魔法をすべて実行します。(これは中国語でも機能し、Tromsø
== を作成することで副次的なメリットも得られますTromso
)。
JavaScriptはわかりませんが、正規表現を使用することはできませんか?
のようなもの[^\w\d\s]
は、数字、文字、空白以外のすべてと一致します。JavaScriptで構文を見つけることは単なる質問です。
Seagulの非常にクリエイティブなソリューションを試してみましたが、数字が特殊文字としても扱われ、私のニーズに合わないことがわかりました。これがSeagulのソリューションの私の(フェイルセーフ)調整です...
//return true if char is a number
function isNumber (text) {
if(text) {
var reg = new RegExp('[0-9]+$');
return reg.test(text);
}
return false;
}
function removeSpecial (text) {
if(text) {
var lower = text.toLowerCase();
var upper = text.toUpperCase();
var result = "";
for(var i=0; i<lower.length; ++i) {
if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
result += text[i];
}
}
return result;
}
return '';
}
reg
最初の関数で宣言するのを忘れました。
ドット(。)は特別とは見なされません。私はMozfetとSeagullの答えにOR条件を追加しました:
function isNumber (text) {
reg = new RegExp('[0-9]+$');
if(text) {
return reg.test(text);
}
return false;
}
function removeSpecial (text) {
if(text) {
var lower = text.toLowerCase();
var upper = text.toUpperCase();
var result = "";
for(var i=0; i<lower.length; ++i) {
if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
result += text[i];
}
}
return result;
}
return '';
}
const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' #
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) == '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');
console.log(replaceString.match(/(?<=->).*?(?=<-)/g));
文字列から削除したい特殊文字のリスト、それらのリストを作成してから、javascript replace関数を使用してすべての特殊文字を削除します。
var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));
または、文字列全体に対してループを実行し、単一の1文字をASCIIコードと比較して、新しい文字列を再生成できます。