wake-up-neo.com

Entfernen Sie das erste Komma in einer Zeichenfolge

Ich suche nach einer Möglichkeit, beispielsweise das erste Vorkommen eines Kommas in einer Zeichenfolge zu entfernen

"some text1, some tex2, some text3"

sollte stattdessen zurückkehren:

"some text1 some text2, some tex3"

Daher sollte die Funktion nur nach mehr als einem Komma suchen und, falls vorhanden, das erste Vorkommen entfernen. Dies könnte wahrscheinlich mit der Regex gelöst werden, aber ich weiß nicht, wie ich es schreiben soll, irgendwelche Ideen?

12
Zed

Dies wird es tun:

if (str.match(/,.*,/)) { // Check if there are 2 commas
    str = str.replace(',', ''); // Remove the first one
}

Wenn Sie die Methode replace mit einer Zeichenfolge anstelle einer RE verwenden, wird nur die erste Übereinstimmung ersetzt.

20
Barmar

String.prototype.replace ersetzt nur das erste Vorkommen der Übereinstimmung:

"some text1, some tex2, some text3".replace(',', '')
// => "some text1 some tex2, some text3"

Die globale Ersetzung erfolgt nur, wenn Sie den regulären Ausdruck mit dem Flag g angeben.


var str = ",.,.";
if (str.match(/,/g).length > 1) // if there's more than one comma
    str = str.replace(',', '');
7
falsetru

Ein einfacher Einzeiler wird es tun:

text = text.replace(/^(?=(?:[^,]*,){2})([^,]*),/, '$1');

So funktioniert es:

regex = re.compile(r"""
    ^                # Anchor to start of line|string.
    (?=              # Look ahead to make sure
      (?:[^,]*,){2}  # There are at least 2 commas.
    )                # End lookahead assertion.
    ([^,]*)          # $1: Zero or more non-commas.
    ,                # First comma is to be stripped.
    """, re.VERBOSE)
2
ridgerunner

ein weg mit split:

var txt = 'some text1, some text2, some text3';

var arr = txt.split(',', 3);

if (arr.length == 3)
    txt = arr[0] + arr[1] + ',' + arr[2];

oder kürzer:

if ((arr = txt.split(',', 3)).length == 3)
    txt = arr[0] + arr[1] + ',' + arr[2];

Wenn das Array weniger als 3 Elemente enthält (weniger als 2 Kommas), bleibt die Zeichenfolge unverändert. Die Aufteilungsmethode verwendet den Parameter limit (auf 3 gesetzt). Sobald die Grenze von 3 Elementen erreicht ist, stoppt die Aufteilungsmethode.

oder mit ersetzen:

txt = txt.replace(/,(?=[^,]*,)/, '');

sie können auch einen Lookahead wie den folgenden verwenden: ^(.*?),(?=.*,) und w/$1 ersetzen.
Demo

1
alpha bravo