2

正規表現を使用 せずに、文字列内の山かっこ内のものを削除するにはどうすればよいですか?

たとえば、次の入力があります。

var str = "This <is> some <random> text";  

そして、次の出力を取得したいと考えています:
このいくつかのテキスト

4

3 に答える 3

7

あなたの例のように括弧が並ぶと仮定すると、次のようなことができます:

str = str.split('(')
   .map(function(s) { return s.substring(s.indexOf(')')+1); })
   .join('');

括弧内のテキストを削除すると、二重スペースが残ることに注意してください。両方のスペースが実際には括弧の外側にあるため、これはあなたの要求に一致しているようです。で削除できます.replace(/\s+/g, ' ')が、もちろん正規表現を使用します。角かっこ内の単語の後に必ずスペースが続き、これも削除されると想定したい場合は、次のようにすることができます。

str = str.split('(')
   .map(function(s) { 
      return s.indexOf(') ') == -1 
         ? s
         : s.substring(s.indexOf(') ') + 2);
    })
   .join('');

この例では、文字列に括弧がない場合 ( "This ") を確認する必要があります。以前は必要ありませんでした。常に +1 を実行しただけであり、indexOf-1 が返された場合、それは単純に文字列全体を取得することを意味していました。

于 2013-03-19T08:15:43.953 に答える
2

何という奇妙な要件でしょう。これは正規表現を使用しません:

"This (is) some (random) text".split('(').map(function(el) {
    var i = el.indexOf(')');
    return el = ~i ? el.substr(i) : el;
}).join('('); // This () some () text
于 2013-03-19T08:16:09.457 に答える
1
var str = "This (is) some (random) text";

while (str.indexOf('(') != -1) {
    str = str.substring(0, str.indexOf('(') - 1) + str.substring(str.indexOf(')') + 1);
}
// Output: This some text
于 2013-03-19T08:20:35.690 に答える